Что такое 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