Kotlin Нулевая безопасность | Часть 1

Если вы программировали на Java или на любом другом языке, который имеет концепцию нулевой ссылки, то вы, должно быть, слышали или испытывали NullPointerException в своих программах.

NullPointerExceptions - это исключения времени выполнения, которые генерируются программой во время выполнения, вызывая сбой приложения и сбои системы.

Было бы неплохо, если бы мы могли обнаруживать возможные NullPointerException ошибки исключения во время самой компиляции и защищаться от них?

В Kotlin у вас есть возможность объявить, может ли переменная содержать нулевое значение или нет. Поддерживая возможность использования NULL в системе типов, компилятор может обнаруживать возможные ошибки NullPointerException во время компиляции и уменьшать вероятность их возникновения во время выполнения.

Возможные причины исключения NullPointerException следующие:

  • Явный вызов выброса NullPointerException ()
  • Использование !! оператор
  • Некоторая несогласованность данных в отношении инициализации, например неинициализированный this передается как аргумент.
  • Взаимодействия Java, такие как попытки доступа к члену по нулевой ссылке, универсальный тип с некорректной допустимостью NULL.
  • Kotlin поддерживает допустимость значений NULL как часть своего типа System. Это означает, что у вас есть возможность объявить, может ли переменная содержать нулевое значение или нет.

Поддерживая возможность использования NULL в системе типов, компилятор может обнаруживать возможные ошибки NullPointerException во время компиляции и уменьшать вероятность их возникновения во время выполнения.

По умолчанию все переменные в Kotlin не допускают значения NULL. Итак, если вы попытаетесь присвоить нулевое значение обычной переменной, компилятор выдаст ошибку -

var variable : CustomClass = CustomClass()
variable = null //compilation error

Чтобы разрешить нулевые значения, вы должны объявить переменную как допускающую значение NULL, добавив вопросительный знак в ее объявление типа -

var nullableVariable : CustomClass? = CustomClass()
nullableVariable = null //see, it works

Таким образом, возникает необходимость проверить, является ли свойство, которое вы или любой другой разработчик собираетесь использовать, нулевым или нет. Если он имеет значение NULL, вы должны показать соответствующее сообщение об ошибке, а если оно не равно NULL, вы можете выполнить операцию, которую хотите выполнить с этим свойством. Самый распространенный и наиболее часто используемый метод проверки допустимости значений NULL - использование if-else.

if(name != null) {
     print("Name is : $name") 
} else {     
     print("Please enter a valid name") 
}

Этот метод можно использовать для проверки нулевых значений. Но что, если переменных так много, и вам нужно проверить, все ли они равны нулю или нет? Вы должны написать несколько операторов if-else для того же самого.

Но нам не о чем беспокоиться, в Kotlin есть несколько способов безопасно сделать это. В следующей статье мы будем работать с типами, допускающими значение NULL.

Спасибо за прочтение :)