Почему вам следует полностью переходить на Kotlin

Я хочу рассказать вам о языке программирования Kotlin и о том, почему вы должны рассмотреть его для своего следующего проекта. Раньше я предпочитал Java, но за прошедший год обнаружил, что кодирую на Kotlin при любой возможности, и сейчас я действительно не могу придумать ситуацию, в которой Java был бы лучшим выбором.
Он разработан компанией JetBrains, и тот факт, что именно эти люди стоят в создании такого набора IDE, как IntelliJ и ReSharper, в полной мере отражается и в Kotlin. Он прагматичен и лаконичен, делает кодирование приятным и эффективным занятием.
Хотя Kotlin компилируется как в JavaScript, а скоро и в машинный код, я сосредоточусь на его основной среде — JVM.
Итак, вот несколько причин, по которым вы должны полностью перейти на Kotlin (нумерация случайна, без определенного порядка):
Kotlin на 100% совместим с Java. Вы можете в буквальном смысле продолжать работать над своими старыми Java-проектами, используя Kotlin. Все ваши любимые Java-фреймворки по-прежнему доступны, и любой фреймворк, который вы напишете на Kotlin, будет легко принят вашим упертым другом, любящим Java.
Kotlin — это не какой-то необычный язык, рожденный в академических кругах. Его синтаксис знаком любому программисту, пришедшему из области ООП, и может быть более или менее понятен с самого начала. Конечно, есть некоторые отличия от Java, например, переработанные конструкторы или объявления переменных val var . В приведенном ниже сниппете представлена большая часть базового синтаксиса:
class Foo < val b: String = "b" // val means unmodifiable var i: Int = 0 // var means modifiable fun hello() < val str = "Hello" print("$str World") >fun sum(x: Int, y: Int): Int < return x + y >fun maxOf(a: Float, b: Float) = if (a > b) a else b >
Это как если бы в язык была встроена более умная и читабельная версия функции String.format() из Java:
val x = 4 val y = 7 print("sum of $x and $y is $") // sum of 4 and 7 is 11
Kotlin будет выводить ваши типы, если вы посчитаете, что это улучшит читабельность:
val a = "abc" // type inferred to String val b = 4 // type inferred to Int val c: Double = 0.7 // type declared explicitly val d: List = ArrayList() // type declared explicitly
Компилятор Kotlin отслеживает вашу логику и по возможности автоматически выполняет приведение типов, что означает избавление от проверок instanceof и явных преобразований:
if (obj is String) < print(obj.toUpperCase()) // obj is now known to be a String >
Вы можете перестать явно вызывать equals() , потому что оператор == теперь проверяет структурное равенство:
val john1 = Person("John") val john2 = Person("John") john1 == john2 // true (structural equality) john1 === john2 // false (referential equality)
Нет необходимости определять несколько одинаковых методов с разными аргументами:
fun build(title: String, width: Int = 800, height: Int = 600)
В сочетании с аргументами по умолчанию именованные аргументы избавляют от необходимости использовать строителей (builders):
build("PacMan", 400, 300) // equivalent build(title = "PacMan", width = 400, height = 300) // equivalent build(width = 400, height = 300, title = "PacMan") // equivalent
В качестве замены оператору switch используется гораздо более удобное и гибкое выражение when:
when (x) < 1 ->print("x is 1") 2 -> print("x is 2") 3, 4 -> print("x is 3 or 4") in 5..10 -> print("x is 5, 6, 7, 8, 9, or 10") else -> print("x is out of range") >
Оно работает как выражение, и как оператор, с аргументом, и без него:
val res: Boolean = when < obj == null ->false obj is String -> true else -> throw IllegalStateException() >
К публичным полям может быть добавлено кастомное поведение set и get, что позволит нам остановить загромождение кода бессмысленными геттерами и сеттерами.
class Frame
Это POJO (Plain Old Java Object) с функциями toString() , equals() , hashCode() и copy() , и в отличие от Java он не занимает почти 100 строк кода:
data class Person(val name: String, var email: String, var age: Int) val john = Person("John", "john@gmail.com", 112)
Предопределенный набор операторов может быть перегружен для улучшения читабельности:
data class Vec(val x: Float, val y: Float) < operator fun plus(v: Vec) = Vec(x + v.x, y + v.y) >val v = Vec(2f, 3f) + Vec(4f, 1f)
Некоторые объекты могут быть деструктурированы, что, например, полезно для итерации карт:
for ((key, value) in map)
Для улучшения читабельности:
for (i in 1..100) < . >for (i in 0 until 100) < . >for (i in 2..10 step 2) < . >for (i in 10 downTo 1) < . >if (x in 1..10)
Помните, когда вам впервые понадобилось отсортировать List в Java? Вы не могли найти функцию sort() и вам в результате пришлось узнать о Collections.sort() . А позже, когда вам нужно было написать String с заглавной буквы, то это привело к написанию собственной вспомогательной функции, потому что вы не знали о StringUtils.capitalize() .
Если бы только существовал способ добавить новые функции в старые классы; тогда ваша IDE смогла бы помочь вам найти нужную функцию при автоматическом дополнении кода. В Kotlin вы можете сделать именно это:
fun String.replaceSpaces(): String < return this.replace(' ', '_') >val formatted = str.replaceSpaces()
Стандартная библиотека расширяет функциональность оригинальных типов Java, что особенно требовалось для String :
str.removeSuffix(".txt") str.capitalize() str.substringAfterLast("/") str.replaceAfter(":", "classified")
Java — это то, что мы должны назвать почти статически типизированным языком. В нем переменная типа String не гарантированно ссылается на String — она может ссылаться на null . Несмотря на то, что мы привыкли к этому, это сводит на нет безопасность статической проверки типов, и в результате разработчикам Java приходится жить в постоянном страхе перед ошибкой NPE ( NullPointerException ).
Kotlin решает эту проблему, проводя различие между ненулевыми (non-null) и обнуляемыми (nullable) типами. Типы по умолчанию являются non-null, и их можно сделать nullable, добавив ? как, например:
var a: String = "abc" a = null // compile error var b: String? = "xyz" b = null // no problem
Kotlin заставляет вас защищаться от NPE всякий раз, когда вы обращаетесь к nullable-типу:
val x = b.length // compile error: b might be null
И хотя это может показаться громоздким, на самом деле все просто благодаря нескольким особенностям Kotlin. У нас все еще есть умное приведение, которое преобразует nullable типы в non-null везде, где это возможно:
if (b == null) return val x = b.length // no problem
Мы также можем использовать безопасный вызов ?. , который производит проверку на нулевое значение вместо того, чтобы выбрасывать NPE:
val x = b?.length // type of x is nullable Int
Безопасные вызовы можно объединять в цепочки, чтобы избежать вложенных проверок if-not-null (если-не-ноль), которые мы иногда пишем в других языках, и если нам нужно значение по умолчанию, отличное от null , то используем elvis-оператор ?: :
val name = ship?.captain?.name ?: "unknown"
Если ничего из этого вам не подходит, и необходимость в NPE крайне велика, то скажите об этом явно:
val x = b?.length ?: throw NullPointerException() // same as below val x = b. length // same as above
Это хорошая система лямбд — она идеально сбалансирована между читабельностью и сложностью, благодаря продуманному дизайну, с простым синтаксисом:
val sum = < x: Int, y: Int ->x + y > // type: (Int, Int) -> Int val res = sum(4,7) // res == 11
А вот и толковые решения:
- Скобки метода могут быть перемещены или опущены, если лямбда идет последней либо является единственным аргументом метода.
- Если мы решили не объявлять аргумент одноаргументной лямбды, он будет неявно объявлен под именем it .
Эти факты в совокупности делают следующие три строки эквивалентными:
numbers.filter( < x ->x.isPrime() >) numbers.filter < x ->x.isPrime() > numbers.filter
И это позволяет нам писать лаконичный функциональный код — только посмотрите на эту красоту:
persons .filter < it.age >= 18 > .sortedBy < it.name >.map < it.email >.forEach
Система лямбд Kotlin в сочетании с функциями расширения делает его идеальным для создания DSL. Взгляните на Anko в качестве примера DSL, который призван улучшить разработку Android:
verticalLayout < padding = dip(30) editText < hint = “Name” textSize = 24f >editText < hint = “Password” textSize = 24f >button(“Login”) < textSize = 26f >>
У вас есть несколько вариантов, если вы собираетесь начать работу с Kotlin, но я настоятельно рекомендую использовать IntelliJ, который поставляется в комплекте с Kotlin — его возможности продемонстрируют все преимущество того, что и язык, и IDE разрабатываются одними и теми же людьми.
В качестве небольшого, но показательного примера, вот что всплыло, когда я впервые попытался скопипастить Java-код со Stack Overflow:

IntelliJ заметит, если вы вставите Java-код в файл Kotlin
Завтра состоится открытое занятие «Основы классов и объектов», на котором мы посмотрим на принципы проектирования классов и их реализации в Kotlin. Поймем, как объектно-ориентированное программирование работает изнутри, создадим свои структуры и посмотрим на возможности языка Kotlin. Спроектируем объектную модель данных. Регистрируйтесь по ссылке.
- Блог компании OTUS
- Программирование
- Kotlin
Java vs Kotlin: что выбрать в 2023 году
Когда речь заходит о разработке приложений для Android, большинство программистов первым делом вспоминают язык Kotlin. С 2019 года компания Google называет его основным языком android-разработки. Всё было бы хорошо, но вот от языка Java никто отказываться не стал, и это породило путаницу среди программистов. Как бы руководство Google ни идеализировало молодой Kotlin, опросы Stack Overflow 2018 года показывают, что почти половина респондентов отдают предпочтение старому и проверенному Java. Kotlin в приоритете только у 5% разработчиков.
Мы сравнили два похожих языка — определили, чем Kotlin отличается от Java, чем Kotlin лучше Java, и какой язык стоит выбрать для android-разработки в 2022 году.
Содержание статьи скрыть
Почему Kotlin и Java популярны
Язык программирования Java занимает третье место в рейтинге наиболее популярных, по данным индекса TIOBE на август 2021 года. Он уступает только языку Python и C. В этом же рейтинге Kotlin занимает только 37 место. Это говорит о том, что большинство разработчиков не торопятся переходить с привычного Java на новый Kotlin.
Причины популярности Java. Язык Java создали в компании Sun Microsystems в начале 90-х годов прошлого столетия. Этот язык появился в ответ на потребность в платформенной независимости. Java стал языком общего назначения, на котором можно писать программы под любые устройства: ПК, бытовую технику и мобильные устройства. Эта особенность языка, наряду с простотой синтаксиса и сильной типизацией почти сразу покорила сердца множества программистов. Сегодня большинство корпоративных проектов и веб-сайтов пишутся не без помощи Java, а аудитория языка насчитывает более 10 млн программистов.
Перспективы Kotlin . Kotlin — это ещё совсем молодой язык, родившийся в российской компании JetBrains в 2011 году. Как Java, C++ и C, Kotlin — статически типизированный язык. Это позволяет ему проверять типы данных в программе во время компиляции, и своевременно выявлять ошибки. То есть если компилятор замечает нарушение правил языка, то программа просто не выполняется. Но главная особенность Kotlin в том, что язык полностью совместим с Java, что позволяет не переписывать имеющиеся приложения. Именно это и покорило программистов в Google.
Разработчики Google наблюдали за ростом языка несколько последних лет и считают его более лаконичным. По их мнению, он открывает больше возможностей, чем Java, а программный код в нём получается на 40% короче, чем в других языках
Java создали с целью сменить язык C++, но и он вскоре показался разработчикам весьма строгим и консервативным. Kotlin — это бунт против устоявшихся правил, простота, свобода и безопасность.
Ежедневные советы от диджитал-наставника Checkroi прямо в твоем телеграме!
Подписывайся на канал
Подписаться
Где используется Java
Так как Java — язык общего назначения, то его применение можно найти везде — от веб-сайтов до роботизированной медицины. Остановимся на сферах его применения подробнее.
- Android-разработка . Java долгое время активно пропагандировался всё той же компанией Google, как самый удобный и производительный язык для программирования под Android. Поэтому большинство приложений для этой операционной системы написаны именно на этом языке.
- Облачные проекты. На глобальном рынке IT отмечается стремительная миграция в облачные хранилища. Переносится всё — от данных компании до целых сервисов. Данные опроса IT-специалистов от Cloud Foundry Foundation показали, что 58% специалистов для разработки облачных корпоративных приложений и сервисов используют именно Java.
- Виртуальная реальность. Виртуальная и дополненная реальность — направления, которые стремительно набирают обороты в последние десять лет. Java — один из языков, на которых пишут множество VR/AR приложений.
- Сфера больших данных. Несмотря на то, что при работе с большими данными более популярны языки Python и R, но здесь находится применение и для Java. У языка даже есть ряд библиотек и фреймворков, специально созданных для работы с Big Data. Основные из них: Java Machine Learning Library, Weka и JSAT.
- Беспилотные автомобили. Беспилотные автомобили — современный тренд. Это красиво, безопасно и удобно. Но чтобы создать действительно безопасный автомобиль, приходится потрудиться над множеством мельчайших деталей. Важно, чтобы программа определяла тип объекта, расстояние до него и его состояние. И язык Java в разработке используется как один из основных.
- Космическая индустрия . NASA — одна из космических компаний, которая использует в своих разработках Java. На нём создана программа World Wind, которая позволяет приблизить любой участок Земли и детально его рассмотреть.
Это далеко не все области применения языка — их намного больше. Это значит, что вооружившись Java, можно разработать любые полезные приложения.
Где используется Kotlin
Kotlin используется для написания мультиплатформенных программ, в мобильной, веб и бэкенд-разработке.
- Веб-разработка . Язык предусматривает компиляцию с JavaScript и инструменты для работы с HTML и CSS. В работе вы можете использовать не только инструменты самого языка, но и библиотеки для JavaScript.
- Бэкенд-разработка . Для бэкенд-разработки предусмотрена компиляция Kotlin с Java, хотя языки совместимы и по отдельности. Но как показывают опросы и исследования, мало разработчиков пишут бэкенд приложений на Kotlin — в этом вопросе большинству привычнее Java.
- Кроссплатформенная разработка . Оказалось, Kotlin — это не только про Android. Kotlin multiplatform — это набор инструментов, который позволяет писать общий код, и компилировать его с байт-кодом для android или IOS. Можно также подключить этот код как библиотеку к нативным приложениям.
- Десктопная разработка. Воспользовавшись любым UI-фреймворком, вроде Swing, вы можете создавать десктопные приложения. Также у самого языка есть фреймворки для десктопной разработки. Один из популярных — TornadoFX.
Google, Netflix и Twitter уже переводят часть своих проектов на Kotlin, ведь, как говорит архитектор языка Андрей Бреслав, «Язык программирования — рабочий инструмент. Если никогда их не менять, можно отстать от жизни».
Kotlin vs Java
Чтобы разобраться, чем Kotlin отличается от Java, сравним их по нескольким критериям: возраст языка, количество кода, проверяемые исключения, безопасность, среда разработки и цели разработки.
| Язык | Kotlin | Java |
| Возраст языка | Kotlin появился в 2011 году, и молодость языка в этом случае не играет ему на руку. Чтобы найти ответ на какой-то вопрос или решение задачи, придётся потратить немало времени. Даже документация здесь не сильно поможет. В большинстве случаев она сводится к тому, что задачи решаются похоже с Java, но с небольшими изменениями | Язык появился в 1995 году. За это время вокруг него сформировалось большое комьюнити, и это позволяет без проблем найти ответ на вопрос, даже очень специфичный. Вы можете почитать документацию, посмотреть видеоролик или обратиться к другим разработчикам — с вероятностью 99% ответ будет найден |
| Количество кода | Чтобы написать на Kotlin такую же программу, как на Java, у вас уйдёт меньше времени и строк кода. Это очень удобно, когда требуется создать проект в короткие сроки | Особенности синтаксиса Java предполагают, что код будет более громоздким, чем в Kotlin. Вдобавок язык крайне консервативен, поэтому важно следить за мелкими деталями |
| Проверяемые исключения | В языке не предусмотрены условия для проверяемых исключений, а значит нет необходимости объявлять какие-либо исключения. Код сокращается — безопасность повышается | Проверяемые исключения — головная боль Java-программистов. Компилятор заставляет каждый привлекающий внимание метод обозначать как исключение. Разработчик вынужден обрабатывать его, а это сказывается на скорости разработки |
| Безопасность | В Kotlin по умолчанию встроена null-безопасность поэтому если программист решит присвоить чему-то значение null — во время компиляции просто произойдёт сбой. Для разработчиков null-безопасность языка позволяет не писать дополнительный код, что является очередным преимуществом языка перед Java | Ещё одна проблема Java-разработчиков связана с так называемой «нулевой безопасностью» или исключением NullPointerExceptions . В Android используется null для представления отсутствия значений, но эта же ситуация может попросту уничтожить программу |
| Среда разработки | Android Studio базируется на программе Intellij Idea, которая создана и поддерживается той же компанией, что и Kotlin — Jetbrains. Поэтому Kotlin-разработчики получают актуальную IDE, которая покрывает все их запросы | При разработке приложений под Android в Java используется специализированная среда разработки IDE — Android Studio. Она заточена под работу с Java, поэтому вы можете начинать писать строку, а IDE сама её закончит |
| Цели разработки | Если вы хотите создать приложение с долгим сроком жизни, то оптимальным вариантом будет выбор Kotlin. Особенно если учитывать простоту разработки на нём и множество фишек, которых нет в Java | Большинство приложения для Android написаны на Java, и маловероятно, что кто-то решит переписать их на Kotlin. Также, когда дело касается инновационных решений, VR/AR-приложений или робомедицины |
| Перспективы | Kotlin — молодой и бунтарский язык, который идёт вразрез с консервативными устоями предков. Он похож на подростка. Многие современные компании переходят на этот язык, но всё ещё неизвестно, что станет с ним завтра. Возможно, скоро он обгонит по популярности язык Java, а возможно — повторит судьбу мёртвого языка Perl | С развитием технологий универсальный Java точно не потеряет свою популярность. Он покоряет своей кроссплатформенностью и возможностью программировать на нём ПО для чего угодно — даже для будильника. Умирать в ближайшее время он не собирается точно, об этом говорит хотя бы его использование в космических разработках |
Kotlin — победитель противостояния в сфере android-разработки. Программисты получили язык, который ждали: современный, простой и прагматичный. Но если вы хотите заниматься чем-то большим, чем разработкой мобильных приложений — выбирайте Java.
Что учить: Java или Kotlin
Редкий kotlin-программист не знает Java. Считается, что знать язык Kotlin без него невозможно, потому что большинство решений и библиотек у молодого языка заимствованы из Java. Поэтому лучше учить оба языка, причём сначала Java, и только потом Kotlin. Большинство популярных библиотек поддерживают совместимость как с Kotlin, так и с Java, поэтому вы сможете использовать оба языка даже в рамках одного проекта.
Знание обоих языков даст вам преимущество в нише мобильной и веб-разработке. Освоив оба языка, вы станете востребованным разработчиком на рынке труда.
Сколько зарабатывают kotlin-разработчики
Согласно данным сайта zarplan, средняя зарплата kotlin-разработчика в России составляет 250 407 руб. в месяц. На сайте вакансий hh.ru зарплата таких специалистов варьируется от 100 000 до 450 000 руб. На основе обзора зарплат рассмотрим, как распределяется заработная плата между специалистами разных уровней от джуниора до тимлида.
| Без опыта, джуниор | 42 000 ₽ |
| С опытом от года, мидл | 100 000 ₽ |
| Профессионал, синьор | 150 000 ₽ |
| Руководитель команды, тимлид | 190 000 ₽ |
Сколько зарабатывают java-разработчики
По данным того же сайта zarplan, средняя зарплата java-разработчика по России составляет 245 369 руб в месяц. Сайт вакансий hh.ru показывает, что разброс зарплат составляет от 95 000 руб. до 485 000 руб. в месяц.
| Без опыта, джуниор | 49 000 ₽ |
| С опытом от года, мидл | 90 000 ₽ |
| Профессионал, синьор | 143 000 ₽ |
| Руководитель команды, тимлид | 148 000 ₽ |
Как изучать языки
Все языки программирования изучают примерно по одной и той же схеме. Вначале нужно изучить основы языка и синтаксис. После — знакомиться с библиотеками, фреймворками и углубляться в особенности языка. Далее — практика. Материалов по изучению довольно много, особенно если у языка большая экосистема, как у Java, и новичку довольно сложно определить, что изучать нужно, а что уже неактуально.
Изучение Java начинайте со следующих книг:
- «Изучаем Java», Кэти Сьерра, Берт Бейтс;
- «Java. Руководство для начинающих», Герберт Шилдт;
- «Java. Библиотека профессионала», Кей Хорстманн.
Популярные курсы по Java
На курсе «Java-разработчик» от Skillbox вы за 6 месяцев научитесь писать код на Java, работать с базами данных в MySQL, пользоваться Git, создавать веб-приложения и оптимизировать их код. В программе вас ждёт 25 тематических модулей 209 видеоуроков, практические задания и их разбор с преподавателем. В конце вы подготовите дипломный проект для реального клиента
Курс «Профессия Java-разработчик» от SkillFactory за 14 месяцев сделает из новичка в мире программирования уверенного java-специалиста. Cпустя семь месяцев вы достигнете уровня Junior и сможете выйти на рынок. С этим вам помогут специалисты карьерного центра. Остальные семь месяцев вы будете накапливать опыт и повышать свою квалификацию. В финале вы создадите индивидуальный проект по реализации собственного приложения
Изучения языка Kotlin начинайте со следующей литературой:
- «Head first kotlin», Дэвид Гриффитс, Дон Гриффитс;
- «Kotlin в действии», Дмитрий Жемеров;
- «Kotlin. Программирование для профессионалов», Джон Скин, Дэвид Гринхол.
Популярные курсы по Kotlin
Курс «Разработчик на Kotlin» от Нетологии рассчитан для начинающих и опытных android-разработчиков, которые хотят освоить ещё один инструмент для работы. На курсе вы научитесь разрабатывать на Kotlin проекты любой сложности, проектировать сервисы, строить архитектуру для них и управлять пользователями. Во время учёбы вы создадите полноценное android-приложение и серверную часть для него
На курсе «Профессия Мобильный разработчик» от Skillbox вы научитесь создавать мобильные приложения под Android и IOS, разрабатывать нативные приложения, настраивать клиент-серверную часть, верстать базовые UI-элементы, тестировать приложения и работать в команде. Каждому студенту помогают найти работу, составить портфолио и резюме
Подведём итоги
Сравнивая Java vs Kotlin, становится понятно, насколько это разные языки по техническим аспектам. Если вы планируете заниматься android-разработкой, то лучше учить оба языка — так у вас будет больше возможностей для реализации, а вы станете действительно востребованным специалистом.
Kotlin показывает себя лучше в быстроте и простоте написания кода, он более современный и нестрогий. Java, наоборот, — более строгий и консервативный язык, но открывает для разработчика возможности за пределами мобильной разработки. Лучше всего не тратить время на обдумывание, какой язык выбрать, и учить их в связке «Java — Kotlin».
Java или Kotlin: что выбрать начинающему андроид-разработчику
Если планируете работать в компании, занимающейся Android-разработкой, и перерасти должность джуна, — вам понадобятся два языка.



Александр Бабаскин
Автор статей о программировании. Изучает Python, разбирает сложные термины и объясняет их на пальцах новичкам. Если что-то непонятно — возможно, вы ещё не прочли его следующую публикацию.
В 2019 году Google делает Kotlin основным языком под Android, оставляет Java и запутывает начинающих разработчиков: одни делают ставку на универсальность Java, других подкупает синтаксис Kotlin.
Разбираемся, почему это так и в каком порядке учить.
На Java и Kotlin пишут новые приложения
Посмотрим на рейтинги языков программирования во второй половине 2020 года:
- TIOBE: Java — 2-е место, Kotlin — 33-е место. Считается по поисковым запросам в Google, YouTube, Bing и других посещаемых площадках.
- RedMonk: Java — 3-е место, Kotlin — 19-е место. Считается по частоте упоминания языков программирования на сайтах Stack Overflow и GitHub.
- PYPL: Java — 2-е место, Kotlin — 12-е место. Считается по поисковым запросам технической документации языков программирования в Google.
- IEEE Spectrum: Java — 2-е место, Kotlin — 18-е место. Считается по частоте упоминания в Google, Twitter, на GitHub, Reddit и других площадках.
- Stack Overflow: Java — 5-е место, Kotlin — 13-е место. Считается по результатам опроса разработчиков сообщества Stack Overflow Survey.
Везде один результат: Java в пятёрке, а Kotlin не попадает в десятку — то есть большинство мобильных разработчиков продолжают писать приложения на Java.

Теперь посмотрим статистику быстроразвивающихся языков программирования по версиям Octoverse GitHub и Stack Overflow — Kotlin на четвёртом месте. Это показывает, что развитие Kotlin не влияет на популярность Java и пока Android поддерживает два языка — новые приложения будут выпускаться на них обоих.

Java и Kotlin нужны для поддержки написанных приложений
Перейдём на developer.android.com — это официальный сайт платформы Android, где появились отзывы разработчиков о преимуществах языка Kotlin:
- код сокращается и занимает меньше места,
- компактность ускоряет работу и упрощает поддержку,
- регулярная поддержка снижает количество сбоев,
- уменьшение сбоев повышает безопасность,
- безопасное приложение проще развивать и наполнять новыми фичами.
Отзывы подкреплены статистикой:
- Kotlin используют в 70% из 1000 популярных приложений Google Play.
- Более 60% профессиональных андроид-разработчиков пишут на Kotlin.
- Языком Kotlin пользуются Slack, Robinhood, Evernote, Zomato, Adobe Reader, WordPress, Pinterest, Deliveroo, Twitter, Reddit и другие приложения.
Когда читаешь это, создаётся ощущение, что вся андроид-разработка завязана на Kotlin. Но для понимания ситуации нужно учитывать три момента:
- Kotlin подключён к Android в 2017 году. До этого в Google Play добавлено 2,9 млн приложений, большинство из которых написано на Java.
- Java — это язык корпорации Oracle. С 2010 года длится судебный процесс между Oracle и Google по иску о неправомерном использовании Java в Android — дело на стадии апелляции и выиграть может любая сторона. Если Google проиграет, то выплатит Oracle более 9 млрд долларов — сумма постоянно растёт и рассчитывается исходя из недополученной прибыли от Java-приложений на Android. По этой причине на сайте Android нет данных по распространённости Java и её масштабу по сравнению с Kotlin.
- В опубликованной на developer.android.com статистике нет ссылок на исследования и не объясняется, кого Google включил в число 60% профессиональных андроид-разработчиков и сколько кода переведено с Java на Kotlin в 70% из 1000 популярных приложений Google Play.
Конфликт Google и Oracle привёл к такой ситуации: Android переходит на Kotlin, а Java растёт и сохраняет запас кода, который Kotlin-сообществу не переписать. Не получится взять объёмное Java-приложение и автоматически компилировать его в Kotlin: языки отличаются и часть приложения нужно редактировать вручную.
Например, в языках по-разному реализованы нулевая безопасность , перегрузка операторов , конструкторы и другие моменты, зафиксированные в документации и дополненные правилами вызова Java в Kotlin. Поэтому разработчику нужны два языка, с которыми он сможет переводить Java в Kotlin или оставлять Java.

Java и Kotlin требуют работодатели
Откроем Хабр Карьера и посмотрим среднюю зарплату начинающего мобильного разработчика. Во второй половине 2020 года джунам платят 60 тысяч рублей.
Java или Kotlin — что учить Android-разработчику?

В наше время рынок мобильной разработки развивается семимильными шагами, и это неудивительно, ведь в мире в год покупается более полутора миллиардов смартфонов. И 8 из 10 этих смартфонов работают на ОС Android. Естественно, выбрав Android-разработку в качестве профессии, вы не прогадаете. В этой статье мы ответим на вопрос, с чего начать новичку и какой язык программирования выбирать — Java или Kotlin. А может, современному специалисту надо знать сразу два?
Вообще, языков мобильной разработки, конечно, больше, чем два вышеназванных. Тем не менее, если вы хотите стать Android-разработчиком, многие специалисты советуют начинать с изучения традиционного Java. Это беспроигрышный вариант, ведь язык стабильно попадает в топ-3 по индексу TIOBE, начиная с 2002 года. К тому же, если вы освоите Java, вам будут легче даваться основные языки. Главное — не учите сразу несколько — это гиблое дело.
Пару слов о Java
При написании Android-приложений на Java вы увидите, что код является длинным и многословным. Некоторых это отпугивает. С другой стороны, в процессе написания всё становится предельно чётким и ясным, поэтому шансы ошибиться минимальны. Да и вообще, большинство из языковых конструкций Java трактуются однозначно, что не может не радовать. А ещё он имеет обратную совместимость, а значит это следующее: при выходе новой версии языка программирования у нас ничего не ломается в старом коде, в отличие, скажем, от более специализированных языков, того же Swift’а.
Для новичка Java хорош и благодаря своей популярности, ведь комьюнити здесь просто огромное. Очень много и различных обучающих материалов, включая бесплатные.
Давайте посмотрим, как выглядит простой пример кода на языке Java для Андроид-приложения. Мы создаём экран с одной карточкой для поста из соцсети:
// Файл dto/Post.java public class Post private long id; private String author; private String content; private boolean likedByMe; public Post(long id, String author, String content) this(id, author, content, false); > public Post(long id, String author, String content, boolean likedByMe) this.id = id; this.author = author; this.content = content; this.likedByMe = likedByMe; > public long getId() return id; > public void setId(long id) this.id = id; > public String getAuthor() return author; > public void setAuthor(String author) this.author = author; > public String getContent() return content; > public void setContent(String content) this.content = content; > public boolean isLikedByMe() return likedByMe; > public void setLikedByMe(boolean likedByMe) this.likedByMe = likedByMe; > @Override public boolean equals(Object o) if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Post post = (Post) o; return id == post.id && likedByMe == post.likedByMe && Objects.equals(author, post.author) && Objects.equals(content, post.content); > @Override public int hashCode() return Objects.hash(id, author, content, likedByMe); > @Override public String toString() return "Post + "id=" + id + ", author='" + author + '\'' + ", content='" + content + '\'' + ", likedByMe=" + likedByMe + '>'; > > // Файл activity/MainActivity.java public class MainActivity extends AppCompatActivity @Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final Post post = new Post(1, "Vasya", "First Post in our network!"); final TextView authorTv = findViewById(R.id.authorTv); authorTv.setText(post.getAuthor()); final TextView contentTv = findViewById(R.id.contentTv); contentTv.setText(post.getContent()); final ImageButton likeBtn = findViewById(R.id.likeBtn); if (post.isLikedByMe()) likeBtn.setImageResource(R.drawable.ic_favorite_active_24dp); > likeBtn.setOnClickListener(view -> // Опустили в целях краткости >); final ImageButton shareBtn = findViewById(R.id.shareBtn); shareBtn.setOnClickListener(view -> Intent intent = new Intent(); intent.setAction(Intent.ACTION_SEND); intent.putExtra(Intent.EXTRA_TEXT, post.getAuthor() + "\n\n" + post.getContent()); intent.setType("text/plain"); startActivity(intent); >); > >Допустим, Java вы освоили. Однако опытные программисты утверждают, что не стоит на этом останавливаться. Да, начинать нужно с Java, но если вы хотите быть экспертом в сфере мобильной разработки, следующий этап развития — Kotlin.
Пару слов о Kotlin
Язык программирования Kotlin максимально совместим с Джава, а значит, процесс его изучения станет проще и не займёт у вас много времени. Причём этот язык достаточно молодой (пусть он и создан в 2011 г., но компания Google назначила его приоритетным языком для платформы Android лишь в 2019 году).
Что ещё можно сказать про Kotlin? Если вспомнить ту же совместимость с Java, то даже бывают случаи, когда разработчики половину проекта пишут на одном языке, а потом переходят на другой. Причём из-за этого перехода доступ к существующему коду, библиотекам и Android SDK не теряется, что круто.
Второй большой плюс — код на Kotlin короче и выразительнее, если сравнивать с Java. Всё, что в Java занимает 4–5 строчек, в Kotlin помещается в одну.
А ещё Kotlin — это детище JetBrains, следовательно, язык имеет прекрасную поддержку со стороны IDE: навигацию по файлам, умные подсказки, рефакторинг кода и т. д.
Специалисты утверждают, что если вы знаете Java, Kotlin вы изучите за 1–2 недели. Причём поначалу можно писать в «Java-стиле», не используя все возможные фичи языка.
Теперь давайте посмотрим на тот же пример, только написанный на Kotlin:
// Файл dto/Post.kt data class Post( val id: Long, val author: String, val content: String, val likedByMe: Boolean = false ) // Файл activity/MainActivity.kt class MainActivity : AppCompatActivity() override fun onCreate(savedInstanceState: Bundle?) super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // Данные должны приходить по сети, но мы упростили пример val post = Post(1, "Netology", "First post in our network!") // Никаких findViewById за счёт Kotlin Android Extensions authorTv.text = post.author contentTv.text = post.content if (post.likedByMe) likeBtn.setImageResource(R.drawable.ic_favorite_active_24dp) > // lambda likeBtn.setOnClickListener // Опущено для краткости > shareBtn.setOnClickListener val intent = Intent().apply // lambda with receiver action = Intent.ACTION_SEND putExtra(Intent.EXTRA_TEXT, """ $post.author> $post.content> """.trimIndent()) type = "text/plain" > startActivity(intent) > > >Как говорится, разница видна невооружённым глазом.
Подытожим
Итак, если хотите качественно и надолго войти в сферу мобильной Android-разработки, первый этап — изучение Java с его пусть и длинными, но зато понятными и традиционными синтаксическими конструкциями. Второй этап — «сахарный» Kotlin. Так как считается, что знать Kotlin невозможно без Java, вы вряд ли перепутаете эти этапы))
Конечно, вы можете остановиться и на Java, но учтите, что знание 2-х самых популярных языков в сфере мобильной разработки даст вам существенное профессиональное преимущество среди других программистов. Соответственно, будет выше и зарплата. Просто помните об этом.
За образцы кода спасибо Дмитрию Гордину, Android developer в RoadAR.