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]