Утверждение ненулевого значения
Часть раздела Основы путешествия по Kotlin на Coddy. Урок 17 из 93.
Оператор безопасного вызова и оператор Элвиса корректно обрабатывают значения null, но иногда вы абсолютно уверены, что в определённый момент выполнения кода значение, допускающее null, не равно null. Оператор утверждения о ненулевом значении !! позволяет сообщить Kotlin: «Я гарантирую, что это не null».
fun main() {
val name: String? = "Alice"
val length = name!!.length // Преобразует String? в String
println(length) // Выводит: 5
}Оператор !! преобразует nullable-тип в его non-nullable-эквивалент. Однако, если значение действительно равно null, ваша программа завершится с ошибкой NullPointerException:
fun main() {
val name: String? = null
val length = name!!.length // Падает здесь!
}Когда это использовать: Используйте !! только тогда, когда у вас есть логика, гарантирующая, что значение не может быть null, но компилятор не может это проверить. В большинстве случаев вместо этого отдавайте предпочтение безопасным вызовам ?. или оператору Элвиса ?:. Утверждение о ненулевом значении должно быть вашим крайним средством, а не первым выбором.
Задание
ЛегкоНапиши функцию getUppercaseLength, которая принимает параметр text и возвращает длину его версии в верхнем регистре.
Функция получает ненулевое строковое значение, но тип параметра допускает значение null (String?). Используй оператор утверждения ненулевого значения !!, чтобы преобразовать его в тип, не допускающий null, затем вызови метод uppercase() и получи значение length.
Параметры:
text(String?): Строка, допускающая значение null, которая гарантированно содержит значение
Возвращает: Длину версии текста в верхнем регистре (Int)
Примечание: В этом задании входные данные всегда будут допустимой строкой, а не
null. Это имитирует ситуацию, когда ты знаешь, что значение существует, но компилятор не может это проверить.
Попробуйте сами
fun getUppercaseLength(text: String?): Int {
// Напишите код здесь
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Операторы. Часть 1
Арифметические операторыОператор остатка от деленияСоставное присваиваниеОператоры сравненияПовторение — простая математика7Базовый ввод-вывод
Функция PrintlnШаблоны строкВвод ReadLineПреобразование типовПовторение — лет до выхода на пенсиюПовторение — правда или ложь10Функции
Объявление функцииПараметры и аргументыВозвращаемые значенияИменованные аргументыЗначения по умолчаниюФункции с одним выражениемПовторение — функция SigmaПовторение — функция валидации13Итерация по последовательностям
Итерация по элементамМетод WithIndexИтерация по строкам, ч. 1Итерация по строкам, ч. 2Повторение — индексированные буквы2Переменные
Val и VarВывод типовЧислаСтрокаЛогическое значениеСоглашения об именованииПовторение — инициализация переменных5Операторы, часть 2
Логические операторы, часть 1Логические операторы, часть 2Логические операторы, часть 3Тернарный оператор с выражением ifПовторение — простая логика8Калькулятор разделения счёта
Приветственное сообщениеВвод данных3Обработка null
Что такое безопасность nullТипы, допускающие nullОператор безопасного вызоваОператор ЭлвисаОсновы задания на функцииУтверждение ненулевого значенияПовторение — безопасный доступ6Принятие решений
Инструкция ifIf — ElseIf как выражениеВыражение whenWhen с диапазонамиПовторение — простой калькулятор9Циклы
Цикл ForЦикл WhileЦикл Do-WhileBreakContinueДиапазоны в циклахВложенный циклПовторение — факториалПовторение — динамический вводПотренируйтесь самостоятельно: Песочница Kotlin