Что такое null safety и как это пишется в Kotlin

?. оператор вызываемый у nullable класса который при обращении к null объекту вместо → того, чтобы вызвать nullPointerExeption вернёт null как результат вызова оператора  

?: - элвис оператор. Если то, что находится слева от оператора не равно нул, то он вернёт это значение. В ином случае вернёт то, что находится справа.  

!! - мы утверждаем, что объект к которому мы обращаемся - не нул, и тогда при обратном вылетит nullPointerExeption.

Oct. 15, 2023, Источник

Null safety, или безопасность относительно `null`, — это концепция, направленная на предотвращение ошибок времени выполнения, которые происходят из-за непредвиденного использования `null` значений (например, `NullPointerException` в Java). Разные языки реализуют механизмы null safety по-разному, чтобы уменьшить возможность возникновения и обработки исключений, связанных с `null`.

Null Safety в Kotlin

Ввёл комплексный подход к обработке `null`, который позволяет избежать многих обычных ошибок, связанных с `null` значениями в Java. Вот основные аспекты null safety в Kotlin:

1. Не допускаются `null` по умолчанию: В Kotlin типы переменных по умолчанию не допускают `null`. Если вы попытаетесь присвоить `null` переменной, которая не была объявлена как допускающая `null`, компилятор выдаст ошибку.

   ```kotlin
   var a: String = "text"
   a = null // Ошибка компиляции
   ```

2. Nullable типы: Чтобы объявить переменную, которая может содержать `null`, используйте символ вопроса `?` после типа данных.

   ```kotlin
   var b: String? = null // Допускается
   ```

3. Безопасный вызов (`?.`): Вы можете использовать оператор безопасного вызова `?.` для доступа к методам и свойствам объекта, который может быть `null`. Если объект окажется `null`, то весь вызов вернёт `null`, избегая таким образом исключения.

   ```kotlin
   val length = b?.length // length будет null, если b равно null
   ```

4. Оператор Элвиса (`?:`): Этот оператор позволяет предоставить альтернативное значение для случая, если выражение слева от `?:` возвращает `null`.

   ```kotlin
   val safeLength = b?.length ?: 0 // Если b равно null, то safeLength будет равно 0
   ```

5. Принудительное разыменование (`!!`): Если вы уверены, что объект не `null`, вы можете использовать оператор `!!`, чтобы принудительно вызвать `NullPointerException`, если объект окажется `null`. Использование этого оператора не рекомендуется без крайней необходимости, так как это противоречит принципам безопасности от `null`.

   ```kotlin
   val nonNullLength = b!!.length // Бросит NullPointerException, если b равно null
   ```

Null Safety в Java

Нет встроенной поддержки null safety, как в Kotlin, и `NullPointerException` является распространённой проблемой. Однако можно использовать различные практики программирования, такие как проверка на `null` перед использованием объектов, использование аннотаций `@Nullable` и `@NonNull` для лучшей документации и анализа кода, а также использование классов из пакета `java.util.Optional` для обработки переменных, которые могут быть `null`.

Kotlin значительно улучшает работу с `null`, делая код более безопасным и уменьшая количество потенциальных ошибок во время выполнения. В Java же нужно самостоятельно обеспечивать обработку `null`, что делает Kotlin привлекательным выбором для новых проектов за счёт улучшенной безопасности и читаемости кода.

April 22, 2024, easyoffer