Переход с Java на Kotlin при создании мобильного приложения.
В данном материале я расскажу, почему нужна миграция с Java на Kotlin при создании мобильного приложения. При этом какие-то детали будут полезны не только разработчикам под Android, но и тем, кто занимается миграцией бэкенда.
Зачем нужен переход на Kotlin?
Kotlin сильно уменьшает количество кода, например, простой Java-объект (Plain Old Java Object), хранящий пять полей, займет примерно 96 строк кода. В то время как на Kotlin аналогичный Data-класс займёт всего одну строку, поскольку компилятор переопределит все нужные методы.
Кроме того, существует несколько серьёзных проблем, которые до сих пор есть в Java, но — внимание — уже решены в Kotlin! Вот некоторые из них:
• Nullability — в Java мы не знаем, возможен ли null в значении данного объекта (и нельзя запретить ему принимать null), из-за чего может случиться всем известная ошибка NullPointerException, поскольку имело место обращение к «нулевому» объекту.
• Raw types — это generic-типы в Java без указания типа-параметра, использование которых может привести к heap pollution — ситуации, когда переменная параметризованного типа хранит в себе объект, параметризованный другим типом.
• Полноценные функциональные типы отсутствуют в Java в отличие от Kotlin.
У Kotlin есть множество возможностей, самые примечательные из которых:
• Extension-функции или функции-расширения класса — делают код «чище», а в сочетании с автодополнением в IDE ускоряют разработку;
• Data-классы хранят данные в лаконичном виде;
• Лямбда-выражения и inline-функции — нужны для использования функций высшего порядка без потери производительности;
• Object-классы позволяют с лёгкостью реализовать полезный паттерн проектирования Singleton;
• Inline-функции с параметрами reified типа позволяют во многих случаях избавиться от рефлексии, которая может влиять на производительность (на старых версиях компиляторов).
Необходимые шаги по переходу:
• Выделите основные участки кода, которые в первую очередь необходимо мигрировать. Выберите места, где максимально сократится код или значительно повысится читаемость и безопасность. Лучше начинать не с core-модулей, а с верхних слоев приложения: из-за того что Kotlin проектировался с учетом необходимости взаимодействия с языком Java, а не наоборот, лучше наследоваться от Java-классов, чем в Java наследоваться от Kotlin-классов.
• Для упрощения перехода используйте встроенные средства конвертации Java-кода в Kotlin-код в IDE Intellij Idea или Android Studio, но не забывайте проверять полученный код.
• Начинайте писать всю новую функциональность только на Kotlin и по возможности дорабатывайте старый код тоже на нём.
• Постепенно углубляйте миграцию — переписывайте внутренние, абстрактные слои до тех пор, пока Java-кода не останется в проекте.
В данном материале я расскажу, почему нужна миграция с Java на Kotlin при создании мобильного приложения. При этом какие-то детали будут полезны не только разработчикам под Android, но и тем, кто занимается миграцией бэкенда.
Зачем нужен переход на Kotlin?
Kotlin сильно уменьшает количество кода, например, простой Java-объект (Plain Old Java Object), хранящий пять полей, займет примерно 96 строк кода. В то время как на Kotlin аналогичный Data-класс займёт всего одну строку, поскольку компилятор переопределит все нужные методы.
Кроме того, существует несколько серьёзных проблем, которые до сих пор есть в Java, но — внимание — уже решены в Kotlin! Вот некоторые из них:
• Nullability — в Java мы не знаем, возможен ли null в значении данного объекта (и нельзя запретить ему принимать null), из-за чего может случиться всем известная ошибка NullPointerException, поскольку имело место обращение к «нулевому» объекту.
• Raw types — это generic-типы в Java без указания типа-параметра, использование которых может привести к heap pollution — ситуации, когда переменная параметризованного типа хранит в себе объект, параметризованный другим типом.
• Полноценные функциональные типы отсутствуют в Java в отличие от Kotlin.
У Kotlin есть множество возможностей, самые примечательные из которых:
• Extension-функции или функции-расширения класса — делают код «чище», а в сочетании с автодополнением в IDE ускоряют разработку;
• Data-классы хранят данные в лаконичном виде;
• Лямбда-выражения и inline-функции — нужны для использования функций высшего порядка без потери производительности;
• Object-классы позволяют с лёгкостью реализовать полезный паттерн проектирования Singleton;
• Inline-функции с параметрами reified типа позволяют во многих случаях избавиться от рефлексии, которая может влиять на производительность (на старых версиях компиляторов).
Необходимые шаги по переходу:
• Выделите основные участки кода, которые в первую очередь необходимо мигрировать. Выберите места, где максимально сократится код или значительно повысится читаемость и безопасность. Лучше начинать не с core-модулей, а с верхних слоев приложения: из-за того что Kotlin проектировался с учетом необходимости взаимодействия с языком Java, а не наоборот, лучше наследоваться от Java-классов, чем в Java наследоваться от Kotlin-классов.
• Для упрощения перехода используйте встроенные средства конвертации Java-кода в Kotlin-код в IDE Intellij Idea или Android Studio, но не забывайте проверять полученный код.
• Начинайте писать всю новую функциональность только на Kotlin и по возможности дорабатывайте старый код тоже на нём.
• Постепенно углубляйте миграцию — переписывайте внутренние, абстрактные слои до тех пор, пока Java-кода не останется в проекте.