Оператор безопасного вызова
Часть раздела Основы путешествия по Kotlin на Coddy. Урок 14 из 93.
Если у вас есть переменная, допускающая значение null, вы не можете напрямую вызывать её методы или обращаться к её свойствам: компилятор этого не позволит, поскольку значение может быть null. Оператор безопасного вызова ?. элегантно решает эту проблему.
Вместо обычной точки . используется ?., чтобы безопасно обращаться к членам типа, допускающего значение null:
fun main() {
val name: String? = "Alice"
val length = name?.length // Возвращает 5
println(length)
val nullName: String? = null
val nullLength = nullName?.length // Возвращает null (без краша!)
println(nullLength)
}Оператор безопасного вызова проверяет, равно ли значение null, прежде чем обратиться к свойству или методу. Если значение равно null, всё выражение возвращает null вместо аварийного завершения. Если значение существует, оператор работает так же, как обычный вызов.
Вы также можете объединять несколько безопасных вызовов в цепочку:
fun main() {
val text: String? = "Hello"
val result = text?.uppercase()?.length
println(result) // Выводит: 5
}Если какая-либо часть цепочки равна null, всё выражение безопасно возвращает null, не вызывая ошибки.
Задание
ЛегкоВам предоставлена следующая переменная, допускающая значение null:
val message: String? = "Kotlin"Используйте оператор безопасного вызова, чтобы:
- Получить длину
messageи вывести её - Преобразовать
messageв верхний регистр и вывести результат
Затем создайте ещё одну переменную, допускающую значение null:
val empty: String? = nullИспользуйте оператор безопасного вызова, чтобы получить длину empty и вывести её.
Каждый результат должен выводиться в отдельной строке. Помните: оператор безопасного вызова возвращает
null, когда значение равноnull.
Попробуйте сами
fun main() {
val message: String? = "Kotlin"
// TODO: Используйте оператор безопасного вызова, чтобы получить длину message и вывести её
// TODO: Используйте оператор безопасного вызова, чтобы преобразовать message в верхний регистр и вывести его
val empty: String? = null
// TODO: Используйте оператор безопасного вызова, чтобы получить длину empty и вывести её
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
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