Sobes.tech
Junior

Ce funcții de domeniu în Kotlin cunoști?

sobes.tech AI

Răspuns de la AI

  • let: Execută un bloc de cod pe un obiect și returnează rezultatul ultimei expresii. Este frecvent utilizat pentru apeluri sigure de metode pe obiecte nullable.
  • run: Are două variante:
    • Ca funcție de extensie: Execută un bloc de cod pe obiectul (this) și returnează rezultatul ultimei expresii.
    • Ca funcție independentă: Execută un bloc de cod fără receptor și returnează rezultatul ultimei expresii.
  • with: Execută un bloc de cod pe un obiect receptor furnizat ca argument și returnează rezultatul ultimei expresii.
  • apply: Execută un bloc de cod pe un obiect (this) și returnează obiectul în sine. Este frecvent utilizat pentru configurarea proprietăților obiectului.
  • also: Execută un bloc de cod pe un obiect (it) și returnează obiectul în sine. Este utilizat pentru acțiuni secundare asupra obiectului.
// Exemplu de utilizare let
val name: String? = "Kotlin"
val length = name?.let {
    // this == null
    // it == "Kotlin"
    it.length // Returnează lungimea șirului
} // length == 6

// Exemplu de utilizare run ca extensie
val numbers = mutableListOf(1, 2, 3)
val firstAndLast = numbers.run {
    listOf(first(), last())
    // this == numbers
} // firstAndLast == [1, 3]

// Exemplu de utilizare run ca funcție independentă
val result = run {
    // Fără receptor
    println("Executarea unui bloc")
    1 + 2 // Returnează 3
} // result == 3

// Exemplu de utilizare with
val configuration = configureUsing {
    // this - obiectul transmis în 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
}

// Exemplu de utilizare apply
val person = mutableListOf<String>().apply {
    // this == listă
    add("Alice")
    add("Bob")
} // person == ["Alice", "Bob"]

// Exemplu de utilizare also
val list = mutableListOf(1, 2, 3)
val doubledList = list.also {
    // it == listă
    println("Procesare listă: $it")
}.map { it * 2 } // doubledList == [2, 4, 6]