Вызов с готовым объектом в Kotlin
Функция with - обычная функция, а не расширение. Готовый
объект передают первым аргументом, в лямбде он
становится this, а результат блока возвращает
сам вызов with:
data class Crate(val code: String, val units: Int)
fun main() {
val box = Crate("B12", 8)
val line = with(box) {
"$code holds $units"
}
println(line)
}
Запись удобна, когда переменная с объектом уже есть и длинное имя мешает читать цепочку обращений к полям:
data class Crate(val code: String, val units: Int)
fun main() {
val box = Crate("B12", 8)
val total = with(box) {
units * 3
}
println(total)
}
Внутри блока можно вызывать методы получателя и смешивать несколько свойств в одном выражении:
data class Crate(val code: String, val units: Int)
fun main() {
val box = Crate("X1", 2)
val ok = with(box) {
code.length > 1 && units > 0
}
println(ok)
}
Есть класс Ledger с полями year
и amount. Создайте экземпляр и одним
scope-вызовом соберите строку
"2024: 900" для своих чисел. Выведите
ее.
Дан объект Segment с началом и концом
отрезка. Верните длину как разность конца и
начала, не дублируя имя переменной с объектом
в каждой строке блока.