Разработка приложений на Android: зачем нужен Kotlin, если есть Java?

There can be only one

РубрикаВремя на чтение8 минут

Ingredients

Directions

Разработка приложений на Android

Бывалые разработчики часто высказывают своё презрительное «Фи!» новым веяниям в среде девелопмента. И хотя основной хейт достается бесконечным JS-фреймворкам, этой же участи не избежал и Kotlin, с которым прожжённые джависты знаться не желали. А король-то, оказывается, был одетый: Kotlin без труда отвоевал свой кусок пирога на рынке мобильной разработке и вряд ли его доля будет снижаться в обозримом будущем. Поэтому сегодня мы попробуем поставить точку в извечном баттле: перейти на Kotlin vs остаться на Java

Классическая дилемма  — улучшать знания в текущем стеке или изучить новомодный фреймворк, который, возможно, скоро потеряет актуальность и будет не рентабелен. Этот же вопрос задают себе Java-программисты, которые разрабатывают приложения на Android. Стоит ли переходить на Kotlin? Насколько нужно знание Java для его изучения? Давайте разбираться вместе

Остаться на Java?

Java — официальный язык программирования, поддерживаемый IDE Android Studio, внутри которого встроен набор инструментов для разработки мобильных приложений Android SDK. Тотальное большинство существующих мобильных приложений для Android написано именно на Java с частичным использованием языка разметки XML (для вёрстки UI) и систем автоматической сборки (Gradle, Maven или Ant). При этом Java и Kotlin можно использовать в одном в проекте, благодаря компилятору последнего: он преобразует машинной код совместимый с Ява-машиной

Плюсы

Не нужно быть сеньором в разработке, чтобы это знать — Java один из основополагающих и ведущих языков программирования с крупнейшим комьюнити. Java легка в освоении и обладает достаточно высокой производительностью. Актуальность и популярность выливается в один огромный плюс — востребованность на рынке труда, множество вакансий, тысячи гайдов, десятки тысяч библиотек и куча готовых примеров (привет, Stackoverflow). Зная Java, перейти при необходимости на Kotlin не составит труда, тем более, что студии пока что всё равно требуют опыт Явы. Зная только Kotlin вы серьёзно сокращаете количество мест, в которые можете устроится (в коммерческой разработке для Android могут возникнуть задачи, где знание Java будет обязательно).

Минусы

Для тех, кто не особо дружит с ООП, Java может вызывать лютое жжение ниже спины: конструкторы классов, исключений, приводящих к падению приложения при отладке, не говоря уж о сбоях при непосредственно работе. Так же в dev-среде есть мнение, что Java морально устарела: отсутствие должной безопасности, не самого удобного синтаксиса и поддержки функционального программирования вперемешку с огромным пластом легаси кода в проектах сильно снижают интерес к этому языку со стороны новой волны разработчиков. Количество компаний, требующих именно Kotlin растёт день ото дня

Перейти на Kotlin?

Новым языком программирования Kotlin можно назвать уже с трудом: он был представлен в 2017 году, а спустя два года стал предпочтительным языком программирования для Android-приложений по версии Google. Многие студии разработки, в том числе такие известные как AppCraft, стали писать приложения исключительно на Kotlin, либо постепенно переводят на него существующие проекты на Java (к слову, это уже начали делать такие гиганты как Google, Netflix, Twitter, Uber, Netflix). Поэтому разработка android приложений заказать которую не составляет особого труда, в 2021 году ведется с нуля именно на Котлин. Такая «миграция» позволяет использовать в приложениях автоматическое выявление типов данных, функциональную парадигму и функции-расширения. По данным опроса StackOverflow 2019 года Kotlin вошёл в пятёрку самых любимых сообществом языков.

Плюсы

Kotlin использует JVM, поэтому одним из главных его достоинств является совместимость с Java: её библиотеки можно спокойно запускать из-под Котлина. Разработчики могут просто писать модули на Kotlin, которые отлично работают с существующим кодом Java. Выпуская байт-код, компилятор Kotlin позволяет двум языкам работать в унисон в одном проекте. Второй очевидный плюс — высокая плотность кода при выполнении одной и той же задачи, а значит меньше бойлерплейта:

Считается, что с безопасностью у Kotlin получше, чем у его конкурента. Язык не разрешает неформатированные типы и, как следствие, создает более безопасный код для типа, а так же автоматически проверяет типы данных, отслеживает null-значения и предотвращает появление NullPointerException — распространённой Java-уязвимости

Касаемо скорости компиляции: для чистых сборок Java действительно быстрее Kotlin на 10-15%, однако куда более распространён сценарий частичных сборок, когда инкрементная компиляция вносит большие улучшения. При запущенном демоне Gradle и включенной инкрементной компиляции Kotlin компилируется так же быстро или немного быстрее, чем Java. На графике ниже можно посмотреть на инкрементную компиляцию с измененным исходным файлом, когда файл импортируется во многие другие файлы проекта:

Минусы

Скорость компиляции является как плюсом, так и минусом этого языка, т.к. иногда она у Kotlin откровенно прихрамывает, в случаях как мы разобрались выше, если вы не изменяете файл, который импортируется многими другими файлами в проекте.

Так же нужно отметить, что Kotlin достаточно узкоспециализированный язык, в то время как Java-разбаботчики могут быть востребованы в куда более широком спектре проектов. Зная Java перейти на Kotlin проблем не составляет, а вот в обратную сторон такой трюк не работает. В вакансиях сейчас редко встретишь «чистый» Котлин. В довесок практически везде указана Java

Многие порталы в качестве минуса указывают еще отсутствие внятной поддержки. Это не соответствует действительности: уйма документации даже на русском языке, обилие учебных материалов, десятки форумов — с поддержкой у Kotlin всё в порядке

Kotlin нельзя выучить без знаний Java?

В этом вопросе очень много полярных мнений. Всё сходится к тому, что, изучая Kotlin, вы всё равно будете сталкиваться с основами Java, без фундаментальных знаний которой вы не напишите сколь-нибудь серьезного проекта. НО! С другой стороны, тот факт, что Котлин завязан на JVM, его можно изучать совсем не зная Java, тем более, что Kotlin значительно проще в этом плане. Тупик.

Если вы знаете основы Java, то многие моменты станут понятнее, когда вы программируете на Kotlin. НО! По ходу изучения Kotlin вы так или иначе начнете понимать библиотеки Явы, которые можно изучать «на лету», не проваливаясь в дебри документации. Опять тупик.

Несмотря на всю прогрессивность Котлина, на данный момент лучше знать Java и не знать Kotlin, чем наоборот. Практически все либы и классы написаны на Яве, мало-мальски знать этот язык придется. Тем более, что крайне полезно просматривать генерируемый байт-код или декомпелированный java-код. Как мы уже писали выше, Java может быть использована не только в мобильной разработке, в то время как Kotlin пока не снискал славы нигде, кроме андроид дева

Итог: 

Существует точка зрения по которой Java и Kotlin не совсем соперники. Скорее они существуют параллельно, как бы дополняя друг друга. Но стоит признать, что переход на Kotlin даст проекту новый виток развития, повысит эффективность за счет удаления ненужных строк и уменьшения количества ошибок при отладке, разгрузит штат для обслуживания legacy-кода. Всё больше и больше новых проектов пишется на Kotlin.

Про совместимость уже говорили — компилятор Котлин использует JVM, здесь нет никаких проблем. Если есть необходимость в Java API , то можно использовать Kotlin native или Kotlin JavaScript. Котлин более понятен и легок в освоении практически всех аспектов разработки: классов данных, методов, написании обратных вызовов и т.д. Он специально разработан для улучшения существующих моделей Java с использованием решений для устранения недостатков проектирования API.

Мнение редакции:

Kotlin — это «улучшенная версия» Явы, фактически её апгрейд или даже в какой-то мере ребилд. С этой точки зрения переход на Kotlin полностью оправдан