Sobes.tech
Junior

Kotlinдеги кайсы чектөөлөр функцияларын билесиз?

sobes.tech AI

AIден жооп

  • let: Объекттин үстүндө коддун блокун аткарып, акыркы билдирүүнүн натыйжасын кайтарат. Көбүнчө nullable объекттердин методдорун коопсуз чакыруу үчүн колдонулат.
  • run: эки вариантка ээ:
    • кеңейтүү катары: объекттин (this) үстүндө коддун блокун аткарып, акыркы билдирүүнүн натыйжасын кайтарат.
    • өзүнчө функция катары: коддун блокун кабылгичсиз аткарып, акыркы билдирүүнүн натыйжасын кайтарат.
  • with: кабыл алуучу объекттин үстүндө коддун блокун аткарып, акыркы билдирүүнүн натыйжасын кайтарат.
  • apply: объекттин (this) үстүндө коддун блокун аткарып, өзүң кайтарат. Объекттин мүнөздөмөлөрүн конфигурациялоо үчүн кеңири колдонулат.
  • also: объекттин (it) үстүндө коддун блокун аткарып, өзүң кайтарат. Объектте жанама иш-аракеттерди аткаруу үчүн колдонулат.
// `let` колдонуу мисалы
val name: String? = "Kotlin"
val length = name?.let {
    // this == null
    // it == "Kotlin"
    it.length // саптын узундугун кайтаруу
} // length == 6

// кеңейтүү катары `run` колдонуу мисалы
val numbers = mutableListOf(1, 2, 3)
val firstAndLast = numbers.run {
    listOf(first(), last())
    // this == numbers
} // firstAndLast == [1, 3]

// өзүнчө функция катары `run` колдонуу мисалы
val result = run {
    // кабылдаучу жок
    println("Running a block")
    1 + 2 // 3 кайтарат
} // result == 3

// `with` колдонуу мисалы
val configuration = configureUsing {
    // this - берилген объект
    width = 100
    height = 200
}

fun configureUsing(builder: ScopeExample.() -> Unit): ScopeExample {
    val example = ScopeExample()
    example.builder()
    return example
}

class ScopeExample {
    var width: Int = 0
    var height: Int = 0
}

// `apply` колдонуу мисалы
val person = mutableListOf<String>().apply {
    // this == тизмек
    add("Alice")
    add("Bob")
} // person == ["Alice", "Bob"]

// `also` колдонуу мисалы
val list = mutableListOf(1, 2, 3)
val doubledList = list.also {
    // it == тизмек
    println("Processing list: $it")
}.map { it * 2 } // doubledList == [2, 4, 6]