Nullable-параметр в Kotlin
Запись T в объявлении сама по себе не
допускает null: подставленный тип
должен быть ненулевым, если только тип явно
не написали T? в нужном месте сигнатуры.
Функция может искать элемент в списке и не
находить его - тогда результат помечают
как nullable через T?, а список
остается List<T>:
fun <T> findFirst(list: List<T>, match: (T) -> Boolean): T? {
for (item in list) {
if (match(item)) return item
}
return null
}
fun main() {
val nums = listOf(2, 4, 6)
println(findFirst(nums) { it > 10 })
println(findFirst(nums) { it == 4 })
}
Если бы параметр типа объявили как T?
в угловых скобках, смысл был бы другой: сам
T уже включал бы null, и List<T>
хранил бы nullable-элементы. Сравните с
функцией, которая возвращает строго T
и бросает ошибку, когда список пуст:
fun <T> firstStrict(list: List<T>): T {
if (list.isEmpty()) error("empty")
return list[0]
}
fun main() {
val words = listOf("io", "api")
println(firstStrict(words))
}
Объявите функцию, которая возвращает последний
элемент списка или null для пустого
списка. Проверьте на пустом списке строк
и на списке из одного слова "go",
оба результата выведите.
Объявите функцию, которая возвращает первый
элемент списка и завершает программу с
ошибкой, если список пуст. Для
listOf(7, 8) выведите полученное
число.