Почему котлин лучше чем java
Kotlin vs Java
И снова здравствуйте. В преддверии старта нового курса «Backend-разработка на Kotlin», мы подготовили для вас перевод статьи, в которой рассказывается о том, чем же Kotlin отличается от Java.
«Kotlin – новый язык программирования, который заставит вас отказаться от Java». На европейской конференции Zebra APPFORUM 2017 в Праге наш Android-разработчик Питер Оттен вдохновлял других начать писать на Kotlin. Расстроены, что пропустили? Не переживайте! Питер расскажет вам, почему он стал большим поклонником этого языка.
Подъем
Так что же такое Kotlin?
Kotlin был впервые представлен в 2011 году, а в феврале 2016 года появилась его версия 1.0 stable release, затем 1.1 в марте. Язык программирования с открытым исходным кодом компилируется в JVM (Java Virtual Machine), Android и JavaScript. Таким образом, Kotlin может использоваться одновременно на JVM и Android-устройствах (интероперабельность). Также он может запускаться на фронтенде с помощью JavaScript. Google официально объявила на своей конференции I/O в мае, что Kotlin стал официально поддерживаемым языком для Android-разработки. С тех пор интерес к языку, его применение и сообщество выросли в разы.
По сравнению с Java
Для сравнения Java и Kotlin на презентации был приведен в пример класс POJO и то, как его можно использовать (рисунок выше). Здесь можно увидеть всю силу и лаконичность Kotlin, когда простой класс Person (с именем, геттером/сеттером и стандартными методами POJO) заменяется ключевым словом «data». Также, глядя на использование класса Person можно заметить следующие различия:
Выводы Mediaan об использовании Kotlin
После посещения других докладов о Kotlin на Droidcon в 2015 и 2016 в Лондоне и GDG DevFest 2016 в Амстердаме наша команда мобильных разработчиков решила, что пришло время взглянуть на новый язык. Мы начали использовать его в октябре 2016 года и просто влюбились в него. Первый новый проект под Android уже был на 100% написан на Kotlin. С тех пор мы не возвращались к Android-разработке на Java.
Теперь, когда мы оглядываемся назад, на наш опыт работы с Java, и видим то, как используется Kotlin сейчас, можно сделать следующие выводы:
Итак, начнете ли вы с Kotlin или перейдете на него?
Есть множество ссылок, которые помогут вам в его освоении:
Чтобы использовать Kotlin в уже существующем проекте или чтобы полностью перенести существующий проект на него, мы рекомендуем следующий подход:
О будущем
Помимо поддержки JVM, Android и JavaScript, Kotlin работает над поддержкой большего числа платформ. Поддержка машинного кода – это следующий большой шаг. Например, запустить код на RaspBerry Pi уже можно (в бета версии). Jetbrains работает над добавлением поддержки для iOS, MacOS и Windows. Это значит, что Kotlin может однажды стать основной нового кроссплатформенного решения для приложений. Больше информации о дальнейшем развитии вы сможете узнать на KotlinConf, их собственной конференции в конце этого года в Сан-Франциско.
Kotlin vs Java: что лучше для Android-разработки?
Противостояние Java и Kotlin – одна из самых громких тем последних лет. С одной стороны Java – вариант, проверенный временем и повсеместно применяемый, с другой у Kotlin есть свои преимущества. Оба языка программирования используются в разработке программ для устройств, работающих на платформе Андроид.
Преимущества языка Java
Разработка Android-приложений на Java дает и разработчикам, и пользователям широкий перечень преимуществ. С применением платформы можно получать программы, которые на 100% совместимы с разными типами машин, без проблем работают с ОС Linux, Windows, Android.
Java сообщество – одно из наиболее влиятельных во всем мире. Язык программирования:
При написании приложений на Java код получается многословным и длинным, что нравится не всем. Сам процесс написания при этом постоянно упрощается, становится все более ясным и четким. Это минимизирует вероятность ошибок.
Трактовки конструкций Java преимущественно простые, имеют однозначное прочтение. После обновлений старые коды не ломаются. Это выгодно отличает язык Джава от того же Свифт. Java – хороший выбор для новичка. Комьюнити огромное, в свободном доступе много учебных материалов (платные и бесплатные).
Особенности разработки мобильных приложений на Kotlin
Android разработка на Kotlin пользуется не меньшим спросом, чем Джава. Создатель языка – компания JetBrains, Котлин на Google I/O официально анонсирован как второй язык Android. Есть поддержка рабочих отношений с облачной платформой Грэдл Спринг, Гугл. Создатели Kotlin утверждают, что приложения могут быть намного более увлекательными, разработка быстрой и интересной. Пока что сообщество языка постоянно увеличивается.
Язык программирования Котлин имеет такие преимущества и предоставляет следующие возможности:
Благодаря Kotlin приложение будет работать корректно, независимо от кода ревью. Написание кодов короткое и выразительное. Есть интегрированная поддержка от IDE (полный перечень опций). Для сравнения – то, что в Джава размещается на нескольких строках, тут занимает только одну.
Чем Kotlin лучше?
С особенностями каждого языка программирования мы разобрались, теперь рассмотрим их конкурентные преимущества.
Kotlin– передовой язык программирования. Он имеет повышенную производительность, интуитивный и последовательный синтаксис, улучшающий скорость проведения работ. Для создания деплоймента готовой программы нужно меньше строк с кодом и, соответственно, времени.
Совместимость Котлин и Джава 100%, то есть методы Джава можно легко вызывать из Котлин. Это плюс для разработчиков и организаций-заказчиков с кодовой базой Джава. Поддержка языка простая, поскольку он интегрирован в IDE, SDK. Перечень инструментов для работы можно использовать стандартный.
Последние версии имеют обратную совместимость с предыдущими. Это обуславливает надежность кодов, избавляет разработчиков от необходимости постоянной доработки кодов разных версий. В изучении Котлин намного проще Джавы, наличие знаний в вопросе разработки приложений для смартфонов не обязательно.
Чем Java лучше Kotlin?
У Java есть свои плюсы, которые можно вынести в ряд конкурентных преимуществ перед Kotlin. Первый – портируемость. С применением виртуальной машины Джава программы на языке запускаются в любой системе. Максимальная совместимость обуславливает лидерство языка разработчика в сегменте создания Android-приложений.
Сообщество Джава огромное. Благодаря ресурсам типа GitHub, Стак Оверфлоу разработчик может получить быструю помощь и поддержку по любой проблеме. Язык кроссплатформенный и подходит для создания соответствующих приложений. Доступен широкий перечень готовых библиотек, SDK для упрощения разработки.
Отстает Java в плане скорости реализации текущих задач. Нужно больше памяти в сравнении с Котлин и другими языками программирования, работа достаточно медленная. Компонентов в коде много, поэтому итоговый результат длинный и тяжелый, часто содержит ошибки, баги.
Так что же – Kotlin убьет Java? Пока что об этом говорить рано. Джава – известный язык, который справляется с поставленными задачами, имеет широкий набор библиотек, инструментов с открытыми исходными кодами. Он не совершенный, но минусы есть у каждого языка программирования.
Минус Java в сложности – он позиционируется как база для начинающих, но есть намного более простые варианты для работы. Котлин можно освоить быстрее, и он улучшает экосистему Java. Отдельного внимания заслуживает стабильность Kotlin, его соответствие инструментам Android Studio. Некоторые разработчики считают, что в будущем язык может вытеснить старую добрую Джаву. Пока что говорить о таких переменах рано. Каждый вариант имеет свои слабые, сильные стороны, решает определенные задачи. Есть проекты, где важны функции и компоненты обоих вариантов.
Выводы
Java и Kotlin – самые популярные языки для разработки всех типов приложений на смартфоны, планшеты, работающие под ОС Андроид. Они имеют свои сильные, слабые стороны, которые следует учитывать при выборе. Есть смысл выбирать оптимальный вариант для каждой конкретной задачи. Так в Java есть примитивные типы (не классы), статические члены, частные выделенные поля, отмеченные перечни исключений, Wildcard – эти опции не доступны в Котлин. Зато в Kotlin есть синглтоны, готовые шаблоны строк, удобное расширение, безопасность стандарта Null, умные смарт касты.
Разработчикам будет полезно владеть обоими языками, регулярно обновлять знания, навыки с учетом последних трендов. Сейчас преимущество в Андроид-разработке сохраняется за Java, но в будущем все может поменяться. Использовать Kotlin проще и удобнее Джавы, программный код будет короче фактически в полтора раза. Также Котлин исключает некоторые ошибки, неизбежные при реализации текущих задач, упрощает обнаружение других. Разработчик тратит меньше времени при сопоставимых результатах.
Java vs Kotlin для Android: мнения разработчиков
В опросах Stack Overflow в 2018 году 45,3% респондентов называли Java самым популярным языком программирования, а Kotlin отдали предпочтение всего 4,5% разработчиков. Тем не менее, в мае 2019 в Google объявили приоритетным языком программирования именно Kotlin. Корпорация не призывала отказываться от С++ и Java, но споры между программистами разгорелись еще жарче.
Нетология узнала у разработчиков, какой язык программирования они используют и каким видят будущее Java и Kotlin.
«Основной поток останется на Java, а Kotlin будут использовать для быстрой разработки»
Дмитрий Качалов, ведущий программист Kelly IT Solutions
Какие языки знает. Изначально я изучал языки веб-разработки, но в какой-то момент захотел заняться и мобильной разработкой тоже. Я начал изучать разработку для Android и освоил язык Java в том необходимом минимуме, чтобы можно было писать первые приложения, запускать на телефоне, публиковать в маркете. Это было еще тогда, когда Kotlin только появился и не был известен широкому кругу разработчиков.
Какие использует. Сейчас при разработке корпоративных приложений я пользуюсь именно Java. Для него доступно много библиотек, есть готовые модули. Кроме того, Android Studio его настолько поддерживает, что буквально можно писать по одной букве, и код будет писаться сам за тебя. Это очень удобно.
В моей практике не было такого, чтобы требовалось знание другого языка. Обычно достаточно Java, потому что на нем реализовано много библиотек и можно выполнить в принципе любую задачу. Единственное, стоит учитывать ограничения самой платформы Android. Потому что какой бы ни был язык, все ограничения рано или поздно упираются в ограничение платформы. На мой взгляд, нет большой разницы, на каком языке реализовывать задачу, главное найти хорошее решение, которое будет работать в рамках конкретной платформы.
Почему предпочитает Java. На нем можно делать бесплатные сервисы, свои методы API, писать сайты, сервера, мобильные приложения. Это по сути универсальный язык, на котором можно делать большое количество операций и разрабатывать разные приложения. К нему есть много наработок и библиотек. А еще — большое сообщество, которое всегда готово ответить на вопросы и помочь.
О противостоянии и будущем языков. Kotlin — определенно, интересный шаг вперед, но на мой взгляд, он не несет в себе каких-то новых подходов и парадигм. Просто сокращает время написания кода за счет более коротких конструкций. При этом в основе все равно лежит та же самая Java.
В ближайшее время Java все равно будет самой популярной. Основной поток останется на Java, а Kotlin будут использовать для быстрой разработки в условиях быстрого прототипирования простых приложений или разработки прототипов. Хоть это и очень провокационная точка зрения. Kotlin совместим с Java, поэтому нельзя сказать, что что-то принципиально изменится.
«Если вы новичок и хотите работать с Android — учите Kotlin. В остальных случаях я бы выбрал Java»
Артем Первушов, лицензированный специалист Android ATC, автор программы курса «Android-разработчик» в Нетологии
Почему предпочитает Java. Прежде всего, надо понимать о чем Kotlin. Kotlin — это в большей степени о синтаксическом сахаре. Нужно ли мне так много сахара? Наверное, нет, я уже привык читать код на Java и не делать ошибок (почти). Должен ли новичок в программировании выбирать заведомо более сложную Java? Наверное, тоже нет.
Еще нужно учитывать выгоду вложения вашего времени. Java — это история не только про Android и desktop. На ней существует огромное число других проектов. И если вы захотите перейти из Android куда-то еще, знание языка пригодится.
О будущем языков. Может в будущем Kotlin захватит мир, а может и нет. «Захват мира» Go, Python, Ruby, JS, происходит гораздо реже, чем нам говорят поклонники этих технологий. Поэтому мой совет такой — если вы новичок и твердо решили связать свою судьбу с Android — учите Kotlin, это удобно и модно. В остальных случаях я бы остановился на Java.
«Kotlin-разработчики могут использовать Java-фреймворки и библиотеки и писать более понятный и простой код»
Семен Пилунц, Android-разработчик, эксперт курса Нетологии
Какие языки знает. Знакомство с программированием случилось у меня в институте, начал с Pascal, также изучали Basic, QBasic. Уже в конце учебных лет начал изучать C. На этом я не остановился и начал изучать другие языки — Javascript, VB 6.0, MS SQL, Java. Вскоре осознал, что ближе всех мне Java, поэтому решил сфокусироваться на нем.
Спустя пару лет по воле случая начал использовать Java для создания мобильных приложений под Андроид. Иногда приходилось в самом Андроиде использовать Javascript, HTML, SQL. Знание других языков всегда помогает.
Какие использует. Сейчас я работаю как на Java, так и на Kotlin. Пока что полностью отказаться от Java мы не можем, но постепенно переходим.
На практике, прежде, чем браться за выполнение задачи, нужно оценить ее, подобрать подход и пути выполнения. Здесь же станет понятно, какой язык лучше использовать. В таком случае не будет ситуации, когда вы не сможете справится с задачей. При этом Kotlin-разработчики могут использовать Java-фреймворки и библиотеки и писать более понятный и простой код.
Почему предпочитает Kotlin. Использовать Kotlin проще и удобнее, чем Джаву. В нем программный код получается в среднем на 40% короче. А еще он позволяет не допускать некоторых ошибок, которые могут возникнуть в ходе выполнения программы. Когда код более простой и понятный, ошибки сложнее сделать и легче обнаружить, поэтому их число стремительно снижается. Вы тратите меньше времени на разработку и тестирование.
О будущем языков. Думаю, в ближайшем будущем Котлин сможет практически полностью заменить Джаву. Уже сейчас он охватывает рынок Android на 50%, и это всего за 3 года после появления. Но все же Джаву надо знать, без нее будет трудно переносить код на Котлин. Здесь отмечу, что Котлин полностью совместим с Java, то есть вовсе не обязательно сразу полностью переписывать приложение. Часто удобнее делать это постепенно.
А еще разработка Android-приложений — не единственное направление Kotlin. Он поддерживает JavaScript, программисты могут перенести на него фронтенд, Kotlin отлично подходит для разработки серверных приложений, позволяя писать короткий и выразительный код, сохраняя полную совместимость с существующими стеками технологий на основе Java. Также создатели добавили поддержку Gradle, чтобы разработчики могли писать на нем Gradle-файлы. Активно идет развитие Kotlin Native, с помощью которого можно создавать iOS-приложения.
«Kotlin не лучше Java в целом, но лучше в мире Android»
Ильназ Гильязов, сооснователь AIMS, автор программы курса «Разработчик на Kotlin» в Нетологии
Какие языки знает. Изначально я учил несколько языков по мере необходимости: Ассемблер, C/C++, потом уже Java, JS, PHP, Python. Поскольку работал и работаю в сфере ИБ, не могу останавливаться на одном языке.
Какие использует. Сейчас выбираю инструменты в зависимости от задач и предпочтений заказчика. Для бэкенда — Java/Kotlin, для легковесных вещей без множества интеграций — Go/NodeJS, для фронтенда — JS/TypeScript + фреймворки, для системных вещей — C++/Go. То есть учитываю не личные предпочтения, а исхожу из задачи и возможностей языка и его экосистемы.
Почему предпочитает Kotlin. Преимущества языка Kotlin в свежем взгляде на вещи, в желании предоставить разработчикам простые и удобные инструменты, не требующие большого количества кода. Это и синтаксический сахар, и корутины. Kotlin позволяет писать меньше кода — это радует.
В Android выбор Kotlin вместо Java очевиден. В мире backend позиции Kotlin гораздо слабее, хотя и там он себе пробивает дорогу. В Spring Framework (который для многих — стандарт в backend) включают фишки для Kotlin, недоступные для Java. Это уже говорит о многом. В большом и сложном backend мы пока по-прежнему работаем на Java, хотя и используем в некоторых местах Kotlin. В случае микросервисной архитектуры, где для конкретного микросервиса не требуется большого количества интеграций, Kotlin чувствуют себя прекрасно.
Kotlin не лучше Java в целом, но лучше в мире Android. Хотя с этим тоже можно поспорить — все зависит от параметров, по которым мы оцениваем.
О противостоянии и будущем языков. Противостояние между разработчиками на Kotlin и Java иногда наблюдаю в проектах, где нет общей договоренности и используют оба языка. А еще есть фанатики, которые верят в единственно правильный язык. В остальном все более-менее гладко, хотя в вопросах интеграции остаются шероховатости. Если вы хотите стать профи в Android, придется знать оба языка. Да и вообще, стоит привыкнуть к тому, что придется постоянно осваивать новые языки, библиотеки, фреймворки, идеи и подходы.
Сейчас будущее Java в Android непонятно. Когда мы перевели все свои Android-проекты на Kotlin, Java в Android застряла на уровне седьмой версии с некоторыми фишками из восьмой. И до сих пор неясно, собирается ли Google решать свои споры с Oracle и вводить поддержку новых версий, либо остановится на текущих позициях. Поэтому инвестиции в изучение, использование и поддержку Java на Android выглядят, как минимум, рискованными в среднесрочной перспективе.
Kotlin же развивается более-менее предсказуемо и предоставляет обертки, которые позволяют использовать все современные возможности языка, добавляет ряд удобств и возможностей именно для разработки под Android. Это немаловажный фактор, который влияет на удовлетворенность разработчиков.
В ближайшем будущем я не думаю, что Kotlin заменит Java. Скорее, он сможет сосуществовать с Java, так как изначально на это и ориентировался. Надеяться на то, что большую часть существующих популярных Java-библиотек перепишут на Kotlin не стоит. Но вы можете писать на Kotlin (разобравшись в нюансах интеграции Kotlin Java, например, рефлексии и всех подводных камнях) и использовать библиотеки, написанные на Java.
«Сейчас никто не ищет разработчика со знание только Java или только Kotlin. Нужно быть универсальным специалистом»
Дмитрий Гордин, Android developer в RoadAR
О противостояни. Чтобы не разводить демагогию и не основываться на личных ощущениях, давайте посмотрим на крупных игроков рынка. Во-первых, Google признает Kotlin основным языком разработки под Android. Во-вторых, вот так выглядят вакансии на HH.ru от топовых компаний:
По моему мнению, оптимальный путь — хорошенько освоиться с Java, а затем начать плавно переходить на Kotlin. Kotlin не переворачивает с ног на голову все, что вы знали из Java. Вы с минимальными изменениями сможете перейти на новый язык и писать в «Java-стиле», постепенно котлинизируя ваш код, добавляя в него сахар и специфичные для Kotlin фишки.
Почему Kotlin лучше Java?
Это ответ на переведенную публикацию «Почему Kotlin хуже, чем Java?». Поскольку исходная аргументация опирается всего на два примера, то не теряя времени пройдем по этим «недостаткам» Kotlin.
Проприетарные метаданные?
изрядное количество подробностей внутренней работы kotlinc скрыто внутри сгенерированных файлов классов. без IDEA Kotlin немедленно умрет
Kotlin будет отставать?
Вкратце, посыл исходной статьи таков, что Kotlin был инновационным, но Java добавит все те же языковые возможности, только продуманее и лучше, и уже Kotlin-вариант выпадет из мейнстрима.
В качестве примера автор приводит instanceof :
В Kotlin сделали примерно так
Но в Java версии 16+ стало так:
Получается, что оба языка имеют способ обработать описанный сценарий, но разными способами. Я уверен, что если бы мог вдавить огромную кнопку «сброс», разработать Kotlin с нуля и снова выпустить сегодня бета-версию, то в Kotlin было бы сделано так же, как сейчас в Java. Учитывая, что синтаксис Java более мощный: мы можем сделать с ним намного больше, чем просто «проверить тип» (например, «деконструировать» типы-значения).
.
Ему придётся опираться только на себя и перестать рекламировать доступность всех преимуществ Java и её экосистемы. Пример с instanceof уже демонстрирует, почему я думаю, что Kotlin не будет лучше Java: почти каждая новая фича, которая появилась в Java недавно или вот-вот появится (в смысле, имеет активный JEP и обсуждается в рассылках) выглядит более продуманной, чем любая фича Kotlin.
Этот аргумент вызван плохим знанием Kotlin. Автор использовал неидиоматичный подход, и вся его критика по сути направлена против своего же неверно написаного Kotlin кода. На самом деле, стоит прочесть лишь вводную страницу документации по базовым инструкциям (чего автор видимо не сделал), чтобы понять что Kotlin вариант не только более лаконичный, но и намного функциональнее, судите сами:
Здесь в одной области можно проверить сразу несколько типов вместе со значениями, без создания дополнительных переменных. Попробуйте повторить в Java c if/instanceof/switch:
Остается разобраться с аргументом, что Kotlin, якобы, придется что-то делать с изменениями вносимыми Java, адаптироваться или расходиться, что это, якобы, создает проблему развития для Kotlin.
Прямо сейчас Kotlin оседлал волну успеха, но со временем жизнь его будет тем тяжелее, чем шире будет зазор между ним и Java, и чем сложнее будет преодолеть этот зазор.
Здесь автор путает местами причину и следствие, пытаясь выдать Kotlin за догоняющий язык. На самом деле, адаптация новых возможностей это в первую очередь проблема именно для Java. Уже давно C# и Kotlin подстегивают Java изменяться, и для Java изменения даются гораздо сложнее по причине изначально тяжеловесного и сложившегося за десятилетия синтаксиса, не предусматривавшего появление новых, функциональных возможностей. В Java для них попросту осталось не так много места, где их можно прикрутить к синтаксису, и именно поэтому они выглядят чужеродно и обременительно для восприятия.
Многие догоняющие возможности Java содержат изъяны по умолчанию, все больше заставляют прибегать к соглашениям, а не к дизайну языка. Вместо громоздкой в коде обертки Optional можно просто передать null, а record ничуть не более богатый чем data class.
Как думаете, сохранит Kotlin свою популярность через пять лет и почему?
Отвечая на этот вопрос, некоторые в комментариях к исходной статье вспомнили историю Scala и Java. Но есть и другая история, история того что сделал С++ со старым Си.
Несомненно, Java останется там где нужно поддерживать старые решения. Однако новые решения будут все больше писаться на Kotlin, пока он не станет языком по умолчанию, как это уже произошло в Android экосистеме, и прямо сейчас происходит для backend разработки в jvm экосистеме. Kotlin не просто лучше, он страхует от старых ошибок на этапе компиляции, дает думать в другой парадигме, открыт для новых возможностей.