Junior
Selgitage, kuidas kasutada 'with' ja 'let' funktsioone Kotlinis.
sobes.tech AI
Vastus AI-lt
with ja let on Kotlin standardraamatukogu funktsioonid, mis on mõeldud mugavamaks tööks objektidega, eriti kui tuleb teha mitu operatsiooni sama objekti peal.
with
withvõtab objekti (saaja) ja lambda funktsiooni argumentidena.- Lambda sees viitab
thissaajale. - Tagastab viimase väljendi tulemuse.
// Näide `with` kasutamisest
class Person(var name: String, var age: Int)
fun main() {
val person = Person("Alice", 30)
val description = with(person) {
// `this` viitab `person`-ile
this.age += 1 // võib jätta välja `this`
"Name: $name, New age: $age" // see string tagastatakse
}
println(description) // Väljund: Name: Alice, New age: 31
}
Kasutatakse, kui on vaja teha mitu operatsiooni ühe objekti peal ilma objekti ise tagasi andmata. Sobib objektide konfiguratsiooniks.
let
letkutsutakse objekti peal (saaja) kui laiendatud funktsioon ja võtab argumentideks lambda.- Lambda sees viitab
itvõi kasutaja määratud nimega objekti. - Tagastab viimase väljendi tulemuse.
// Näide `let` kasutamisest
fun main() {
val name: String? = "Bob"
val length = name?.let {
// `it` viitab `name`-le
println("The name is not null: $it")
it.length // tagastab stringi pikkuse
}
println("Length: $length") // Väljund: The name is not null: Bob, Length: 3
val nullName: String? = null
val lengthOfNull = nullName?.let {
// see plokk ei käivitu, kuna nullName == null
it.length
}
println("Length of null: $lengthOfNull") // Väljund: Length of null: null
}
Kasutatakse, kui on vaja teha operatsioone mitte-null objekti peal (tihti koos ?. operaatoriga) või luua uus vaadeldavusala lokaalse muutujaga (it).
Peamised erinevused:
- Kutsumise viis:
withkutsutakse funktsioonina,letlaiendatud funktsioonina. - Muuttuja lambda sees:
withkasutabthis,let—it. - Algne eesmärk:
withkasutatakse peamiselt objekti konfiguratsiooniks,letsageli null-objektide operatsioonideks ja lokaalse vaadeldavusala loomiseks.
with |
let |
|
|---|---|---|
| Kutsumine | Funktsioon: with(object) { ... } |
Laiendatud funktsioon: object.let { ... } |
| Viide | this |
it (või kasutaja määratud nimi) |
| Tagastab | Viimase väljendi tulemus lambda sees | Viimase väljendi tulemus lambda sees |
| Põhikasutus | Objekti konfiguratsioon, operatsioonide grupeerimine | Null kontroll (?.let), lokaalne vaadeldavusala |