Вычисление на объекте в Kotlin
Функция run - scope-функция с получателем this
внутри лямбды. Поля и методы объекта вызывают без
имени, а значение последнего выражения блока становится
результатом всего вызова:
class Parcel(val weight: Int, val fragile: Boolean)
fun main() {
val fee = Parcel(3, true).run {
var sum = weight * 10
if (fragile) sum += 50
sum
}
println(fee)
}
Тот же прием удобен, когда объект уже создан, а нужно одним фрагментом собрать производное число или строку из его свойств:
class Parcel(val weight: Int, val fragile: Boolean)
fun main() {
val note = Parcel(1, false).run {
"weight=$weight fragile=$fragile"
}
println(note)
}
Если блок не возвращает полезное значение, run
все равно отдает Unit. Для вычисления с
результатом последняя строка лямбды должна быть
выражением, а не пустой командой:
class Parcel(val weight: Int, val fragile: Boolean)
fun main() {
val doubled = Parcel(4, false).run {
weight * 2
}
println(doubled)
}
Сделайте класс Room с шириной и длиной
в метрах. Создайте комнату 3 на 5
и через scope-вызов получите площадь. Выведите
число.
У класса Badge есть код уровня и флаг
vip. Сформируйте строку вида
"level=2 vip=true" для подходящих
значений и выведите ее одним выражением после
создания объекта.