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 - объекти додашуда дар configureUsing
    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]