Junior
Jakie funkcje zakresu w Kotlinie znasz?
sobes.tech AI
Odpowiedź od AI
let: Wykonuje blok kodu na obiekcie i zwraca wynik ostatniego wyrażenia. Często używany do bezpiecznego wywoływania metod na nullable obiektach.run: Ma dwie warianty:- Jako funkcja rozszerzenia: Wykonuje blok kodu na obiekcie (
this) i zwraca wynik ostatniego wyrażenia. - Jako funkcja samodzielna: Wykonuje blok kodu bez odbiorcy i zwraca wynik ostatniego wyrażenia.
- Jako funkcja rozszerzenia: Wykonuje blok kodu na obiekcie (
with: Wykonuje blok kodu na obiekcie-receptorze podanym jako argument i zwraca wynik ostatniego wyrażenia.apply: Wykonuje blok kodu na obiekcie (this) i zwraca sam obiekt. Często używany do konfiguracji właściwości obiektu.also: Wykonuje blok kodu na obiekcie (it) i zwraca sam obiekt. Używany do wykonywania działań ubocznych na obiekcie.
// Przykład użycia let
val name: String? = "Kotlin"
val length = name?.let {
// this == null
// it == "Kotlin"
it.length // Zwraca długość łańcucha
} // length == 6
// Przykład użycia run jako rozszerzenia
val numbers = mutableListOf(1, 2, 3)
val firstAndLast = numbers.run {
listOf(first(), last())
// this == numbers
} // firstAndLast == [1, 3]
// Przykład użycia run jako funkcji samodzielnej
val result = run {
// Bez odbiorcy
println("Uruchamianie bloku")
1 + 2 // Zwraca 3
} // result == 3
// Przykład użycia with
val configuration = configureUsing {
// this - obiekt przekazany do 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
}
// Przykład użycia apply
val person = mutableListOf<String>().apply {
// this == lista
add("Alice")
add("Bob")
} // person == ["Alice", "Bob"]
// Przykład użycia also
val list = mutableListOf(1, 2, 3)
val doubledList = list.also {
// it == lista
println("Przetwarzanie listy: $it")
}.map { it * 2 } // doubledList == [2, 4, 6]