logo
Ещё

Java vs Kotlin – большой обзор

Подавляющее большинство программистов на вопрос, на каком языке пишут приложения для Android, даст один из двух вариантов ответа: Java или Kotlin. В этом нет ничего удивительного, если учесть простой и очевидный факт. Именно эти два языка являются официальными и поддерживаются компанией Google – разработчиком операционной системы Android. Как и основной платформой для программирования для этой ОС – Android Studio. Поэтому сравнение языков выглядит вполне логичным. Рассмотрим противостояние Kotlin vs Java более внимательно.


Java и Kotlin

Первым делом необходимо дать некоторые общие сведения о каждом из языков программирования. Целесообразно начать с более «старшего».

Что такое Java?

Java относится к типизированным и объектно-ориентированным языкам программирования. Создан одним из первых – в 1995 году – компанией Sun Microsystem, позднее приобретен одной из крупнейших IT-корпораций Oracle. Язык является универсальным, так как используется для написания разнообразных клиентских и серверных приложений. Но основным направлением применения многие специалисты считают создание ПО для Android. До 2017 года был единственным языком, официально поддерживаемым Google и сервисом компании Android Studio.


Что такое Kotlin?

Kotlin также относится к типизированным и объектно-ориентированным языкам программирования. В этом нет ничего удивительного, так как он работает поверх JVM (Java Virtual Machine), которая является основной частью исполнительной системы Java. Поэтому с некоторой долей условности Kotlin можно назвать надстройкой над Java.

Язык появился в 2011 году, а в 2017 получил официальный статус от компании Google в качестве инструмента для работы на Android Studio. Что стало основанием для длительных разбирательств между Google и Oracle, чьи интересы, как владельца бренда Java, были затронуты таким решением.


На каких языках пишут новые приложения?

Разработчики Kotlin, как и специалисты Google, декларируют множество преимуществ этого языка программирования над Java. На официальном сайте операционной системы Андроид приводятся следующие плюсы Kotlin:

  • компактность программного кода;
  • более высокая производительность ПО;
  • минимум сбоев;
  • повышенный уровень безопасности;
  • активное развитие языка и поддерживающих его сообществ программистов.

Но даже активная поддержка со стороны Google не привела к потере лидирующих позиций Java. Именно этот язык продолжает использовать большая часть разработчиков, что позволяет ему входить в топ-5 (часто – в топ-3) любых опросов среди программистов. Kotlin обычно занимает места ниже 10-го, а иногда и не входит в топ-20.


Поэтому на вынесенный в подзаголовок вопрос можно ответить однозначно: намного чаще на Java. Важно понимать, что такой перевес достигается в значительной степени за счет простых и средних по сложности приложений. Это объясняется тем, что серьезные профессионалы в программировании для Android все активнее используют именно Kotlin. Но в пользу Java сказывается намного более длительная история и огромное число приложений, написанных ранее.


Но нужно сделать одну важную оговорку. Java так сильно доминирует над Kotlin не из-за каких-то своих положительных качеств, а из-за легаси. До появления Kotlin все повально писали код на Java, и с появлением Kotlin они, естественно, не стали переходить на новый язык – пришлось бы переписывать весь код и перекапывать всю архитектуру. А раз старые приложения продолжают писать на Java – значит, спрос на джавистов намного больше, чем на Kotlin-разработчиков. А раз джавистов – больше, то и новые приложения чаще пишутся на Java, потому что у джавистов нет времени/желания изучать Kotlin. Формируется порочный круг, который медленно разрывают стартапы, не имеющие легаси по определению. Поэтому не стоит отдавать предпочтение Java только потому, что ее больше на рынке – Java-разработчиков на рынке тоже больше, то есть вы столкнетесь с более серьезной конкуренцией.

Для чего нужны Java и Kotlin?

Оба языка программирования являются универсальными и хорошо дополняют друг друга. Считать, что они используются исключительно для Android-разработки, в корне неверно. Напротив, каждый из языков имеет намного большую сферу практического применения. Применительно к Java она включает:

  1. Программирование приложений для мобильных устройств на Android. Большая сфера применения языка, и эта сфера постоянно растет с увеличением количества мобильных устройств в мире – то есть ежегодно. Но – не доминирующая сфера применения Java.
  2. Разработка и реализации облачных проектов. Внезапно основная сфера применения Java. Если говорить более широко, то основная сфера применения – это enterprise, то есть очень большие разработки от и для очень больших компаний. Здесь Java используется чаще всего, и, так как сейчас все мигрируют в облака, облачные проекты стали основной сферой применения Java.
  3. Создание виртуальной реальности и связанных с ней продуктов. Для больших проектов все же преимущественно используется C++, для средних и маленький проектов проще использовать Java.
  4. Big Data. Java здесь существенно уступает Python, но все еще используется.
  5. ПО для управления беспилотными автомобилями и другими техническими средствами. Java уступает С++ по производительности, но позволяет создавать намного более безопасные и отказоустойчивые приложения, поэтому и ценится в разработке беспилотных автомобилей.
  6. Авиакосмическая индустрия. Ракеты в космос запускают на C, Rust и ассемблерах, но для сопроводительных приложений Java используют довольно часто.

Область использования Kotlin не менее обширна и включает:

  1. Веб-разработку. Kotlin способен без костылей и прокладок понимать JavaScript, что делает его крайне удобным для любой веб-разработки, включая сайты и приложения для смартфонов.
  2. Backend-программирование. Здесь Kotlin существенно уступает Java из-за легаси, о чем мы рассказывали выше. Но тренд на более частое использование Kotlin на бэкенде все же есть.
  3. Разработка приложений – браузерных, мобильных и десктопных. В плане десктопной разработки и Kotlin, и Java уступают многим другим ЯП, но все же используются, потому что имеют для этого инструменты.
  4. Создание кроссплатформенных приложений для мобильных устройств как на Android, так и на iOS. Kotlin пользуется той же JVM, что и Java, поэтому может без проблем использоваться для разработки одного приложения на много платформ.

Востребованность языков

Язык Java активно применяется в работе сайтов практически всех ведущих корпораций мира. Как было отмечено, он продолжает оставаться намного более популярным, чем конкурент. Но после 2017 года многие из них, например, Twitter, Netflix и сам Google, часть проектов и сервисов переводят на Kotlin.

Предсказать дальнейшее развитие событий и итоговый результат конкурентной борьбы между схожими языками программирования достаточно сложно.

Что не делает невозможным их сравнение по наиболее важным критериям, приведенное в таблице.

Критерий сравнения

Язык программирования

Java

Kotlin

Возраст

Около 27 лет. Java намного старше, что является одним из ключевых аргументов в его пользу

Примерно 11 лет. Заметно уступает конкуренту по этому параметру

Объем кода

Сравнительно большой, заметно более громоздкий, чем у Kotlin

Краткий и лаконичный. Один из самых простых в написании

Безопасность

Относительно невысокая

Высокая, предусматривающая встроенную опцию null-безопасности

Среда программирования

Одинаковая для обоих языков разработки ПО – Android Studio

Цели создания ПО

Преимущественно поддержка старых продуктов, написание простых приложений

Разработка нового и сложного программного обеспечения с длительным сроком использования

Комьюнити

Намного многочисленнее, с большим количеством форумов, тематических сайтов и методических ресурсов

Находится на стадии активного формирования, уступает по численности и имеющимся ресурсам

Доля рынка Android

По разным данным – в диапазоне 75-85%

По разным данным – в диапазоне 15-25%

Запросы работодателей

Входит в число обязательных требований по большинству вакансий

Выступает необходимым требованием далеко не всегда, но очень часто – при наборе в самые серьезные IT-компании

Перспективы

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

Выглядят несколько предпочтительнее, в том числе – за счет очевидной поддержки Google

Сравнение кода Kotlin и Java

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


Null

Первый пример различия – это null по ссылке. В Java можно без проблем написать:

String new_string = “Hello world”;

new_string = null;

Ссылка указывала на строку, одна строчка кода – и ссылка уже никуда не указывает. И это – ужасный дизайн, потому что одна упущенная ссылка может сломать все приложение, и искать баг вы будете очень долго. Kotlin позволяет вам делать ссылки, которые не могут быть null:

var foo: String = "Hello World!"

foo = null // compilation error

var bar: String? = "This is nullable"

bar = null // okay

Если вы создали простую ссылку – она в принудительном порядке должна указывать на строку. Хотите сделать так, чтобы ссылка могла быть null – поставьте специальный оператор «?».

Switch

Оператор Switch в Java выглядит крайне громоздким и неудобным:

public class Calculator {

public static double calculate (double a, String op, double b) throws Exception {

switch (op) {

case "plus":

return a+b;

case "minus":

return a-b;

case "div":

return a/b;

case "times":

return a*b;

default:

throw new Exception();

}

}

}

В Kotlin его существенно оптимизировали:

fun calculate(a: Double, op: String, b: Double): Double = when (op) {

"plus" -> a + b

"minus" -> a - b

"div" -> a / b

"times" -> a * b

else -> throw Exception()

}

Создание классов

Создание классов в Java – это ад, потому что нужно переопределить как минимум 3 метода класса Object (toString(), equals() и hashCode()), для каждого поля нужно добавить геттеры и сеттеры:

public class Person {

private String name;

private String email;

private int age;

public Person(String name, String email, int age) {

this.name = name;

this.email = email;

this.age = age;

}

public String getName() {

return name;

}

public String getEmail() {

return email;

}

public int getAge() {

return age;

}

@Override

public String toString() {

//переопределение

}

@Override

public int hashCode() {

//переопределение

}

@Override

public boolean equals(Object obj) {

//переопределение

}

}

При этом в 99% случаев переопределение – настолько стандартное, что IDE все сама делает за вас. В Kotlin весь код выше (и это – сокращениями) умещается в одну строку:

data class Person(val name: String, val email: String, val age: Int)

Дополнение функции

Kotlin может дополнить функционал класса «на лету»:

fun String.greeting(): String = "Hi there!"

fun main() {

val foo = "DaString"

val bar = foo.greeting() // "Hi there!"

}

Java так не умеет, совсем.

Функциональная парадигма

Kotlin заимствовал от Python возможность объявлять функциональность вне классов:

fun foo(): String = "Hi there!"

class SomethingRandom {

fun bar(): String = "Hi there!"

}

Это позволяет вам писать функционал в зависимости от своих потребностей, а не в зависимости от навязываемых языком правил. Java же жестко навязывает правила игры: ничего вне класса описать нельзя.

Тернарный оператор

Увы, в Kotlin его нет, поэтому приходится изобретать велосипеды:

val foo = if (bar == 1) getMessage() else "Hi there!"

Перехват исключений

Java заставляет вам перехватывать все выкидываемые кодом исключения, в то время как Kotlin позволяет вам не обрабатывать исключения вовсе – тогда их будет выкидывать через весь стэк вызовов по стандартному протоколу. Это однозначно можно назвать минусом – если вы сами выкидываете где-то в коде исключение, вы должны его как-то обработать, а если кода для обработки нет – значит, вы забыли его написать (и обнаружите вы это только тогда, когда приложение крашнется). 

В каком порядке учить?

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

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

Например, реализации определенного проекта, где требуется исключительно знание Kotlin и его окажется достаточно.

Курсы по Java

  • Java Developer. Basic. Базовый курс на Java-разработчика. Длится 4 месяца, учеба – по 4 академических часа в неделю. Вас научат базовому синтаксису Java, составлению архитектуры приложений, взаимодействию со сторонними сервисами. В конце – большой проект. Стоимость курса: 43 890 рублей.
  • Основы разработки на Java. Бесплатный курс по основам разработки. Вас познакомят с синтаксисом, дадут гайд по разработке веб-приложения и телеграм-бота к нему. После курса вы будете понимать, насколько Java вам интересна.
  • Java-разработчик. Курс на получение профессии, длительность – 10 месяцев. Много практики, 5 проектов в портфолио. Вы будете учить Java Core, Spring, микросервисы, базы данных, алгоритмы и структуры данных, создание архитектуры приложений и развертывание его инфраструктуры. Стоимость: 6 300 рублей в месяц при рассрочке на 24 месяца.

Курсы по Kotlin

  • Разработка Android-приложений на Kotlin. Бесплатный курс из 31 урока, который даст вам базу разработки мобильных приложений на Kotlin. 8 часов видео, 90 квизов, 21 практическое задание.
  • Android-разработка на Kotlin. Интенсивный курс на получение профессии разработчика – 144 академических часа за 4 месяца. Курс состоит из двух блоков, на первом вы учите основы языка и баз данных, на втором изучаете продвинутые темы, вроде API и асинхронности. Стоимость курса: 19 400 рублей в месяц.
  • Программист Kotlin. Курс состоит из двух: на первом вас будут учить основам алгоритмизации и программирования на Kotlin, на втором вам будут на практике показывать, как создать свое Android-приложение. После прохождения курса дают диплом о профессиональной переподготовке. Стоимость курса: 53 940 рублей, можно взять в кредит.

Что почитать и посмотреть по теме?

  1. Дэвид и Дон Гриффитсы «Head first kotlin».
  2. Дмитрий Жемеров «Kotlin в действии».
  3. Кэти Сьерра и Берт Бейтс «Изучаем Java».
  4. Герберт Шилдт «Java. Руководство для начинающих».
  5. Раздел сайта Android Studio от Google про Kotlin.
  6. Раздел сайта Oracle с документацией по Java.
  7. Видео ролик на YouTube «Java vs Kotlin for Android App Development»
  8. Видео ролик на YouTube «Что учить новичку в Android: Java vs Kotlin? Мобильный разработчик (Ru, Android)».
  9. Видео ролик на YouTube «Kotlin vs Java. 5 фишек Kotlin, которых нет в Java».
  10. Видео ролик на YouTube «Kotlin vs Java comparison».

FAQ

Почему Java и Kotlin так часто сравнивают?

На это существует, как минимум, три веских причины. Первая и главная – языки являются прямыми конкурентами в разработке приложений для Android, а это один из самых больших сегментов рынка ПО. Вторая – признание Google обоих языков в качестве официальных для Android Studio. Третья – создание Kotlin фактически на базе Java.

В чем преимущества Java, по сравнению с конкурентом?

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

Чем Kotlin превосходит Java?

Язык программирования проще, компактнее и безопаснее. Он заметно удобнее в работе и позволяет создать более производительные приложения.

Какой из языков программирования используется чаще?

Java остается намного более востребованным и широко применяемым языком программирования.

Каковы перспективы каждого из языков – Java и Kotlin?

У каждого из них хорошие перспективы. Хотя Kotlin выглядит несколько предпочтительнее, прежде всего – из-за разносторонней поддержки от Google.

Подведем итоги

  1. Java и Kotlin – два языка программирования, которые сравнивают чаще всего.
  2. Главной причиной выступает прямая конкуренция на одном из самых объемных и перспективных рынках в IT-отрасли – разработке приложений для мобильных устройств на ОС Андроид.
  3. Java создан намного раньше – в 1995 году, результатом чего стали несколько главных преимуществ, включая: множество разработанных приложений, большая популярность, обширное комьюнити.
  4. Kotlin появился намного позже – в 2011 году, а стал официальным языком для Android Studio еще позднее – только в 2017-м. Но в его пользу выступают компактность языка, многофункциональность, кроссплатформенность и безопасность.
  5. Оба сравниваемых языка программирования имеют хорошие перспективы. Положение Kotlin выглядит несколько выигрышнее из-за поддержки со стороны Google. В пользу Java – популярность, необходимость поддержки ранее созданных приложений и активное комьюнити.
Часто ищут