рдЬрдВрдЧрд▓ рдореЗрдВ рдПрдХ рдореЛрдмрд╛рдЗрд▓ рдбреЗрд╡рд▓рдкрд░ рд╣реИ, рджреЗрдЦрддрд╛ рд╣реИ - рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рдЖрдЧ рд▓рдЧреА рд╣реИред рд╡рд╣ рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рдмреИрда рдЧрдпрд╛ рдФрд░ рдЬрд▓ рдЧрдпрд╛

рджреБрдирд┐рдпрд╛ рдкрд╛рдЧрд▓ рд╣реЛ рд░рд╣реА рд╣реИред рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ рд╕рднреА рдирдП рдореЛрдмрд╛рдЗрд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред рдЖрдЬрдХрд▓ рдирдИ рддрдХрдиреАрдХреЛрдВ рдХреЛ рди рд╕реАрдЦрдирд╛ рдмрд╣реБрдд рдЦрддрд░рдирд╛рдХ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХрд╛ рдЬреНрдЮрд╛рди рдЕрдкреНрд░рдЪрд▓рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдк рдХрд╛рдо рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддреЗ рд╣реИрдВ, рдПрдХ рд╣реАрдЯрд┐рдВрдЧ рдореЗрди рдХреЗ рдкрд╛рд╕ рд░рд╣рддреЗ рд╣реИрдВ, рднреЛрдЬрди рдХреЗ рд▓рд┐рдП рдмреЗрдШрд░ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд▓рдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдЕрд╢реНрд▓реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕реАрдЦреЗ рдмрд┐рдирд╛ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдореЗрдВ рдорд░ рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЬрд╛рд╡рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдХреЛрдЯрд▓рд┐рди рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрд░реНрд░рд╕ рдЧрдпрд╛ рдФрд░ рдПрдХ рдХрд┐рддрд╛рдм (рд╣рд╛рдп, рдПрдмреНрд░реЗрд╕рд▓реЙрд╡ , рдпреЛрд▓ ) рдкрдврд╝рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рджреЛрд╕реНрддреЛрдВ рд╕реЗ рдкреВрдЫрд╛ рдХрд┐ рдЖрдкрдХреА рдЬрд╛рдирдХрд╛рд░реА рдХрд╣рд╛рдВ рд╣реИ рдФрд░ рдореЗрд░реА рдЖрддреНрдорд╛ рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╢реВрдиреНрдпрддрд╛ рдХреЗ рд╕рд╛рде рд╡рд╛рдкрд╕ рдЖрдпрд╛ред рдУрд▓реЗрдЧ рдпрд╛рддреНрд░реА рдХреЛ рдХреЛрдЯрд▓рд┐рди рдореЗрдВ рдЕрд░реНрде рдЦреЛрдЬрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВ!


  • рдмреЛрдирд╕: рд╣рд╛рдмреНрд░реЛ-рд╕рд╡рд╛рд▓ "рдЖрдк рдХреЛрдЯрд▓рд┐рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ?"



тЧП  Java , . a = b тАФ , a[1] = 2 тАФ . - . IDE . IDE , , .


тЧП  API , - map/filter , . . , IDE тАФ .


тЧП  , IDE. Kotlin IntelliJ IDEA? , Java? . , - JB .


тЧП  it, . - seq.map { it -> foo(it, 1); }.map { it -> bar(it, 2); }.filter { it -> it.getBaz() > 0; }. ? ! ┬л , , , ┬╗.



тЧП  ?.let { foo(it); }?.let { bar(it); } тАФ . , . if. .


тЧП  . JvmStatic JvmName, .


, :


class C {
    companion object {
        @JvmStatic fun foo() {}
        fun bar() {}
    }
}

, . :


  • C.foo(); тАФ
  • C.bar(); тАФ ,
  • C.Companion.foo(); тАФ
  • C.Companion.bar(); тАФ

? , . , , , :


fun List<String>.filterValid(): List<String>
fun List<Int>.filterValid(): List<Int>

JVM : filterValid(Ljava/util/List;)Ljava/util/List;


:


fun List<String>.filterValid(): List<String>

@JvmName("filterValidInt")
fun List<Int>.filterValid(): List<Int>

: Kotlin checked exceptions. Java- . ┬л ┬╗ @Throws:


@Throws(IOException::class)
fun foo() {
    throw IOException()
}

, ┬л , ┬╗. , ?


, Java-to-Kotlin Interop , .


тЧП  / get (, ENGLISH? -) тАФ .


import java.util.Calendar
fun calendarDemo() {
    val calendar = Calendar.getInstance()
    if (calendar.firstDayOfWeek == Calendar.SUNDAY) {  // call getFirstDayOfWeek()
        calendar.firstDayOfWeek = Calendar.MONDAY      // call setFirstDayOfWeek()
    }
    if (!calendar.isLenient) {                         // call isLenient()
        calendar.isLenient = true                      // call setLenient()
    }
}

тЧП  - , .


, . , ┬л ┬╗, тАФ . MutableList swap:


fun MutableList<Int>.swap(index1: Int, index2: Int) {
    val tmp = this[index1] // 'this'   
    this[index1] = this[index2]
    this[index2] = tmp
}

val lst = mutableListOf(1, 2, 3)
lst.swap(0, 2) // 'this'  'swap()'    'lst'

- , , , . - . , : , , ? -, ?


, - . , , -.


тЧП  . , reduce.


reduce:


listOf(1, 2, 3).reduce { sum, element -> sum + element } == 6

identity (fold), .


listOf(1, 2, 3).fold(0) { sum, element -> sum + element } == 6

, -? , .


, fold reduce , fold , reduce . , identity .


? - Optional , ? null , null-friendly .


тЧП  . , -, ? .


, - :


data class User(val name: String, val age: Int)
val duncan = User("Duncan MacLeod", 426) 
val (name, age) = duncan
println("$name, $age years of age") //  "JaDuncan MacLeodne, 426 years of age"

:


val (name, age) = Pair("Java", 23)
println("$name, $age years of age") //   "Java, 23 years of age"

, :


public data class Pair<out A, out B>(
    public val first: A,
    public val second: B
)

, , . , - . , , .


тЧП  тАФ ( ).


C++, . , тАФ . , C++ return , - . , undefined behavior. , . тАФ . , . .


, Kotlin . , . a b, c, when, d, e f, !


fun a(check: Int) = b(check)
fun b(check: Int) = c(check)

fun c(check: Int) =
    when (check) {
        1 -> d()
        2 -> e()
        else -> f()
    }

fun d() = "result 1";
fun e() = "result 2";
fun f() = "result 3";

fun main(args: Array<String>) {
    println(::a.returnType)
    for (i in 1..3)  println(a(i).javaClass.name)

, , . f, , , .


:


kotlin.String
java.lang.String
java.lang.String
java.lang.String

:


fun d() = "1";
fun e() = 100500;
fun f() = listOf<String>();


kotlin.Any
java.lang.String
java.lang.Integer
kotlin.collections.EmptyList

API. API , Kotlin .



, . , , , . , Kotlin- :-)


Joker 2018 ( ), (asm0dey) , Kotlin ( ), , GraalVM, Spring, Spring Security, Spring Transactions, jOOQ, ..


Kotlin Java ? . , Kotlin . !


. , 8-9 2018, Mobius. JetBrains , Kotlin Muplitplatform. , , Kotlin, , . , , , , . .

Source: https://habr.com/ru/post/hi431678/


All Articles