Познакомившись впервые с языком Котлин после продолжительной работы с Java меня воротило от одной мысли, что null-safety может быть полезен и вообще переменная без null - примитив, но я сам этого не осознавал.
Как это проявлялось:
Когда я работаю с легаси кодом (ну это весь код, который вообще пишется), то я не понимаю, где у может быть null, а где нет, что заставляет меня делать переключение контекста от реализации бизнес логики на выяснение: а может ли тут быть null?
Рассмотрим синтетику: У нас есть сущность номер телефона с филдами: номер, международный код города и префикс (ну +7, +3 и т.д.), написана она до нас, есть мэппинг в базу, вообщем все по канонам кровавого. По бизнесу все 3 поля номера телефона обязаны быть.
Если я в Java, то при работе с этой сущностью у меня есть сколько вариантов как ее использовать:
Какие у нас есть варианты в Котлин:
Конечно тут можно возразить, что есть совместимость с Java и там все плохо в этом плане, на что есть такой ответ: совместимость это круто, но как он сделан, это трейд офф, чтобы не плодить море конструкций вида !! ?:
Ну и еще раз про само свойство null safety: это не совсем техническая штука, скорее это про бизнес, если у меня в бизнесе какое-либо значение не может быть null, так пусть оно упадет на ранних этапах, чем с каким-то null жить.
Источник статьи: https://habr.com/ru/post/560634/
Как это проявлялось:
- Не удобно работать с переменными и филдами, у которых не может быть null. Ну просто даже не понимал, как что-то не может быть null.
- Не удобно работать с nullable типами. Ну блин ?: !!
Когда я работаю с легаси кодом (ну это весь код, который вообще пишется), то я не понимаю, где у может быть null, а где нет, что заставляет меня делать переключение контекста от реализации бизнес логики на выяснение: а может ли тут быть null?
Рассмотрим синтетику: У нас есть сущность номер телефона с филдами: номер, международный код города и префикс (ну +7, +3 и т.д.), написана она до нас, есть мэппинг в базу, вообщем все по канонам кровавого. По бизнесу все 3 поля номера телефона обязаны быть.
Если я в Java, то при работе с этой сущностью у меня есть сколько вариантов как ее использовать:
- Использовать как есть, не думая о том, что там с null-ам (продакшен разберется, если что баг пофиксим)
- Дойти до базы данных и посмотреть на констрейнт, тем самым убедившись, что null там не может быть и можно спокойно юзать эту сущность без проверок.
- Если расставлены аннотации @NotNull, нажать Ctrl+Q, чтобы увидеть описание.
- Обработать все поля, предполагая, что везде может быть null.
- Написать свой код, потом разобраться с потенциальным null.
- Можно еще придумать варианты....
Какие у нас есть варианты в Котлин:
- Значение филда может быть null и я могу сразу обработать такой кейс.
- Значение не может быть null.
Конечно тут можно возразить, что есть совместимость с Java и там все плохо в этом плане, на что есть такой ответ: совместимость это круто, но как он сделан, это трейд офф, чтобы не плодить море конструкций вида !! ?:
Ну и еще раз про само свойство null safety: это не совсем техническая штука, скорее это про бизнес, если у меня в бизнесе какое-либо значение не может быть null, так пусть оно упадет на ранних этапах, чем с каким-то null жить.
Источник статьи: https://habr.com/ru/post/560634/