Расширение nullable-типа в Kotlin
Функция-расширение может быть объявлена для
nullable-типа: после имени типа ставят ?.
Тогда this внутри тоже nullable, и пустое
значение обрабатывают в теле функции:
fun String?.orDash(): String {
if (this == null) {
return "-"
}
return this
}
fun main() {
val a: String? = "hi"
val b: String? = null
println(a.orDash())
println(b.orDash())
}
Тот же смысл записывают короче через оператор
?:. Функция orDash подставляет
прочерк, если строки нет:
fun String?.orDash(): String = this ?: "-"
fun main() {
val note: String? = null
println(note.orDash())
}
Вызов orDash не требует ?. перед
именем: расширение само написано для String?
и принимает null как получатель.
Объявите функцию orDash для String?.
Она возвращает "-" для null
и саму строку иначе. Выведите результат для
null и для "ok".
Объявите функцию orZero для Int?.
Она возвращает 0 для null
и число иначе. Выведите ответ для null
и для 7.