Безопасный вызов у объектов в Kotlin
Оператор ?. обращается к свойству или методу только
если ссылка на объект не null. Иначе результат
всего выражения - null:
class User(val name: String)
fun main() {
val user: User? = User("john")
val empty: User? = null
println(user?.name)
println(empty?.name)
}
У вложенного объекта свойство тоже может быть пустым.
Несколько ?. подряд образуют цепочку: при первом
null дальнейшие шаги не выполняются:
class City(val name: String)
class User(val city: City?)
fun main() {
val withCity = User(City("Paris"))
val noCity = User(null)
println(withCity.city?.name)
println(noCity.city?.name)
}
Метод nullable-объекта вызывают так же - с ?.
перед именем метода:
class City(val name: String) {
fun label(): String = "city: $name"
}
class User(val city: City?)
fun main() {
val user = User(null)
println(user.city?.label())
}
Даны классы City и User из урока.
Переменная user типа User? равна null.
Выведите название города одним выражением.
Сделайте класс Profile с методом title().
Сделайте класс Account со свойством profile
типа Profile?. Выведите результат title()
для аккаунта без профиля.