С момента появления версии 1.0 прошло всего несколько лет, а язык приняли на вооружение многие крупные компании и разработчики. Всё благодаря тому, что создателям языка удалось добиться целей, поставленных в начале пути — разработать инструмент, который был бы удобнее и безопаснее Java, но менее сложен, чем Scala.

В программу факультета Android-разработки GeekUniversity мы недавно добавили курс по изучению Kotlin. Сегодня предлагаем обсудить его возможности и то, почему этот язык можно считать одним из столпов будущего разработки приложений на Android. Кстати, 14 марта мы проводили вебинар «Перспективы и потенциал Kotlin в Android-разработке», так что если тема вам интересна, ознакомьтесь с ним. Ну а пока — давайте разбираться с возможностями и перспективами Kotlin.

Итак, сам язык представляет собой удобный как для начинающих программистов, так и для разработчиков с опытом инструмент. Он очень лаконичный, компактный и понятный (по большей части — даже интуитивно). С течением времени язык совершенствуется.

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

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

Почему многие разработчики считают, что за Kotlin будущее Android-разработки?

Лаконичность


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

Open-source


Да, c 2012 года язык является открытым. А это означает обширное сообщество разработчиков, которые помогают совершенствовать язык. Сообщество связано с сотрудниками Kotlin, обратная связь весьма надежная. Во многом это обусловлено помощью со стороны команды Kotlin Slack. Представители Kotlin прислушиваются к мнению сторонних разработчиков и часто реализуют внесенные предложения, если те позволяют улучшить язык.

Kotlin давно «созрел»


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

В последнем случае рекомендуем использовать IntelliJ, он идет в комплекте поставки Kotlin. На Хабре, кстати, уже хвалили IntelliJ, во многом потому, что разработчики подошли к его созданию весьма грамотно. IntelliJ, к примеру, «понимает», если в файл Kotlin вставляется Java-код и предлагает транслировать его на Kotlin.

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



Обновляемость и развитие


Совершенству действительно нет предела. JetBrains ведет очень хорошую работу по улучшению и расширению возможностей Kotlin. В последней на момент написания статьи версии (1.3.21) сделано много улучшений в плагине для Gradle, в том числе тех, что касаются мультиплатформенных проектов.

Кстати, Kotlin предоставляет возможности, аналогичные поздним версиям Java, для ранних версий Android API. Из пожеланий — было бы отлично, если бы веб-фреймворк ktor вышел из альфы и оброс большим сообществом, чтобы Kotlin стал еще ближе к fullstack-инструменту.

Null-безопасность


Это более технический пункт, чем все предыдущие, но не упомянуть о нем нельзя. Дело в том, что та же Java не может гарантировать, что переменная типа String содержит строку, а не null. Да, разработчики давно адаптировались и это по большей части не проблема, но безопасность, которая обеспечивается статической типизацией, это снижает. В результате Java-разработчикам приходится быть наготове и думать о Null Pointer Exceptions.

В Kotlin такой проблемы нет, здесь типы разделяются на non-null (значение этих типов не может быть null) и nullable (может быть null).

Писать на Kotlin легко


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

Кроме того, Kotlin и Android Studio — чудесное сочетание, которое ускоряет процесс разработки. Построение проекта выполняется всего за несколько минут, хотя иногда система и может выдавать предупреждения о необходимости доустановки отсутствующего компонента.

В любой момент можно выполнять поиск по коду, БД, командам, элементам пользовательского интерфейса и прочим местам. Во многих случаях это весьма полезно. К примеру, тогда, когда забыта какая-та команда IDE. Отладка тоже выполняется без всяких проблем.

Kotlin прост в изучении


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

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

Для разработчика важным может оказаться еще и то, что с Kotlin постепенно начинают работать крупнейшие компании мира. В числе прочих это Prezi, Basecamp, Amazon Web Services, Pinterest, Coursera, Netflix, Uber и многие другие компании. То есть программист, который знает Kotlin, может рассчитывать на отличное рабочее место и интересные задачи, в которые он будет погружен с первого дня. А поскольку с течением времени число компаний, которые используют Kotlin расширяется, то и востребованность специалистов по Kotlin увеличивается.

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

Статья готовилась совместно с преподавателем курса Kotlin Станиславом Хижняком, за что ему огромное спасибо!

Комментарии (36)


  1. HawkeyePierce89
    14.03.2019 22:28
    +3

    Здравствуйте. А при разработке Android приложений на Kotlin есть такая штука как Hot Reload? Или надо постоянно делать полную компиляцию приложения?

    Я из мира фронтенда, не пинайте сильно, если вопрос очень нубский.


    1. lgorSL
      14.03.2019 22:58
      +1

      Есть Instant Run — он при некоторых условиях может ограничиться дозагрузкой кода в работающее приложение. Подробностей не могу сказать, так как сам им практически не пользуюсь.


      1. web_alex
        15.03.2019 00:14
        +2

        Instant Run до сих пор работает криво. Как и hot reload (поправьте, если ошибся с название) под Flutter.
        Задумка классная, но реализация пока ещё сыровата… имхо


    1. tuxi
      14.03.2019 23:25
      +1

      Для общего случая есть вот такие решения


  1. njc
    14.03.2019 23:50
    +2

    Мы у себя в компании начинаем использовать Котлин на бэкенде. Показывает он себя очень хорошо. Котлин настолько хорош, что даже, если вы будете писать на нем Java-style код (а вы будете это делать по-началу), то он будет все равно читабельнее и безопаснее :)


    1. web_alex
      15.03.2019 00:11
      +1

      так и есть!)) полностью с Вами согласен!


    1. MEJIOMAH
      15.03.2019 20:17

      Вы пегу как то подкручиваете котлином?


      1. njc
        16.03.2019 18:47

        Ну во-первых, у нас есть уже не только Pega :) мы еще разработчики девопс инструментов и улучшенной IDE pegadevops.com, правда там пока пишем на Java. У нас сейчас есть ряд проектов, один из которых внутренний, где мы используем Kotlin. pegadevops также в планах переводить на него.


  1. alatushkin
    15.03.2019 06:56

    "Kotlin как будущее..."?
    По моим ощущениям он уже продолжительное время "настоящее"


  1. navrocky
    15.03.2019 07:24

    А я бы сказал, что он уже, возможно, прошлое. С учётом появления Flutter с Dart, на которую судя по всему рано или поздно придется перейти, когда Андроид будет заменён Фуксией. К сожалению сейчас писать под Flutter нельзя на котлине..


    1. Neikist
      15.03.2019 07:43

      Собственно на мой взгляд это единственный недостаток флаттера. Если бы использовался для него kotlin native — было бы просто отлично. Не скажу что дарт плохой язык, но котлину на мой взгляд он все же уступает.


      1. xfaetas
        15.03.2019 08:38

        Зато под Flutter можно писать на Swift


        1. Neikist
          15.03.2019 08:43

          О_о Что я пропустил? Я вроде за флаттером слежу и такого не заметил. Вы не путаете случайно с фуксией? Под нее да, и на свифте вроде как планируется возможность, и на Java + kotlin, и на rust, и еще на чем то вроде… Другое дело что подозреваю это все равно с флаттером придется интегрировать. Либо рисовать свой UI.


    1. piconst
      15.03.2019 11:02

      Вы ведь понимаете, да, что когда состоится релиз фуксии(если вообще будет да и будет ли под мобилки), то ни один заказчик в здравом уме не будет переписывать с нуля приложение на flutter, возможно, он будет писать новое приложение на flutter, но тут нужно искать разработчиков, которых толком пока нет, а нет их из-за молодости flutter.
      Не забывайте: выпуск фуксии не означает мгновенный закат Android. Вспомните, сколько устройств на Android сейчас существует? И что с ними делать, а сколько ещё будет выпущено и т.д, и т.п.
      И фуксия поддерживает Android приложения, а значит ничего не изменится для разработчиков.


      1. saag
        15.03.2019 16:53

        Вспомните, сколько устройств на Android сейчас существует?

        Вспомните сколько устройств существовало на Symbian, и где этот Symbian сейчас (он кстати тоже поддерживал приложения на Java хоть и ME). Закат очень вероятен, к примеру Фуксия еще не вышла, но китайцы один аппарат уже тестируют.


  1. saag
    15.03.2019 07:29

    А потом Гугл выпускает свой телефона на Фуксии и весь мир замирает в напряжении…


  1. mikaakim
    15.03.2019 07:47

    Kotlin? Null-safety? Да бросьте…
    image


    1. Neikist
      15.03.2019 07:56

      И это, уверен, было где нибудь на интеропе с java.


      1. konsoletyper
        15.03.2019 19:37

        Есть масса сценариев, где котлиновская null safety не работает. Например, мы вот только что положили в мапу элемент, примерно так:


        val map = mutableMapOf<String, String>()
        map["foo"] = "bar"

        А потом (мамой клянёмся, что "foo" есть в мапе):


        println(map["foo"]!!.length)

        если не поставить !!, компилятор ругается. К сожалению, null safety не всесилен. Он помогает устранить часть ошибок с NPE, которые возможны в Java, но ото всех ошибок такого рода избавиться невозможно. Справедливости ради стоит так же сказать, что для Java есть статические анализаторы кода и наборы аннотаций, которые позволяют добиться примерно аналогичного поведения (Checker Framework, инспекции IntelliJ IDEA).


        1. Neikist
          15.03.2019 20:07

          Так правильно ругается, если вы ставите

          !!
          — то это вы должны гарантировать что значение не null. Вы также можете написать свою реализацию которая будет возвращать не T? а T, либо бросать например эксепшн если уж никак найти значение не может а дефолтное отсутствует.
          Ну и в вами описанном варианте котлин поможет хотя бы конструкцией вида
          println(map["foo"]?.length ?: 0)

          В таком случае NullPointer вы не словите и вернете дефолтное значение. Можно конечно и на java написать
          map.get("foo") == null ? 0 : map.get("foo")
          но сами понимаете. Плюс в котлине можно написать и
          println(map["foo"].length)
          если это ваша реализация где вы гарантируете T


          1. konsoletyper
            15.03.2019 23:42

            Я прекрасно знаю, что значит !!.. Иногда?.. не спасает, т.к. для ключа, которого нет в мапе, всё равно нет валидного значения (можно вернуть что-то бессмысленное, но тогда что-то всё равно упадёт в будущем). Ситуации бывают разные, я написал не один десяток тысяч строк на Котлине, и всякого повидал. Мой комментарий ставил целью опровергнуть заявление, что KNPE был брошен где-то в "интеропе с Java". Отнюдь. Котлин не всесилен, и есть куча способов упасть в чистом котлине. Можно даже NPE словить, если пошаманить со статическими инициализаторами или с lateinit.


            1. Neikist
              16.03.2019 00:15

              Ну в общем да, KNPE действительно не только в интеропе может быть брошен, но лично я !!.. применяю только ну уж в совсем крайних случаях. На мой взгляд слишком опасный оператор.
              З.Ы. С форматированием!!! у хабра конечно…


        1. alatushkin
          15.03.2019 20:07

          println(map[«foo»]!!.length)

          А чего хочется получить таким кодом?
          Почему не?
          println(map[«foo»]?.length?:0)


          Просто немного странно удивляться, если пишешь
          throw NullPointerException()


          1. konsoletyper
            15.03.2019 23:45

            А почему я должен выводить 0 для случая, если ключа нету в мапе? Как я уже ответил другому комментатору, ситуации разные бывают, я просто привёл простейший пример. Могу специально покопаться и поискать места в самом kotlinc, где используются !!, и это вполне уместно.


  1. Beshere
    15.03.2019 10:13

    Ух ты как хорошо, какая наглядная картинка!

    А почему тогда tiobe index показывает, что Java занимает 1 место среди языков, а Kotlin проигрывает даже таким артефактам как Ada и Lisp, занимая 39 место?


    1. Neikist
      15.03.2019 10:20

      Вот кому кому — а tiobe я не очень верю. Правда кому верить — тоже неясно. Tiobe если не ошибаюсь завязан на гуглеж по теме, а лично я гуглю либо по android sdk, либо по java, по фану еще иногда по разным языкам, а по котлину хорошо если несколько раз искал что то. java, python, js и еще многие языки однозначно популярнее котлина, но если говорить об андроид разработке — то исходя из требований котлин как бы не уже популярнее java.


    1. FSA
      15.03.2019 14:38

      Статистика. Она зависит от того, что и каким образом собирать. Если у меня есть 9 проектов на Java и один новый на Kotlin. При этом Java проекты правлю только когда ошибки возникают, а Kotlin активно разрабатываю, то по статистике у меня Java занимает 90%, а Kotlin — 10%. А вот если собрать статистику по числу новых строчек кода, всё может оказаться совсем наоборот. При этом в первом и втором случае будут одни и те же проекты.


  1. Yoooriii
    15.03.2019 11:02

    Интересно, чувствуется прогресс в разработке. А интересно, можно ли писать бэкэнд на котлине и насколько это оправдано, а то весь акцент на Андроиде.


    1. TheOnex
      15.03.2019 13:07

      Писать бэкэнд можно, пока с небольшой болью, но можно. Надеюсь в скором времени все устаканится, обрастет поддержкой всех фреймверков, а то терпеть Java уже не хватает сил.


      1. zeolant
        15.03.2019 13:39

        Так Scala же есть. Он мне, кстати, больше чем Kotlin импонирует


        1. lgorSL
          15.03.2019 17:19

          На скале можно и под андроид писать. Единственная проблема — скала 2.12 требует java 8, поэтому приходится 2.11 использовать.


  1. osipovaleks
    15.03.2019 12:24

    Из пожеланий — было бы отлично, если бы веб-фреймворк ktor вышел из альфы и оброс большим сообществом, чтобы Kotlin стал еще ближе к fullstack-инструменту.

    Извините, я может что-то упускаю, но ведь разве ktor уже не в релизе (ссылка на maven)? Или есть еще какой-то другой ktor?


  1. DEADMC
    15.03.2019 12:51

    С подключением!
    А если серьезно, то мне очень нравятся такие статьи в стиле ретро в 2019. Скажите планируются ли статьи по реализации MVP/MVVM и плюсах Clean Architecture?


    1. Nexus7
      15.03.2019 15:22

      Про MVVM уже давно написано: antonioleiva.com/mvvm-vs-mvp
      и снято, там есть видео от автора.


      1. DEADMC
        15.03.2019 15:54
        +1

        Я несерьезно же. Вся статья это по факту копипаста JetBrain презентаций 2х-3хлетней давности. Только без конкретики, опыта, без чего-то нового. Просто вода с целью хоть кого-то сподвигнуть на соответствующие вполне конкретные курсы.


  1. Space_Cowboy
    15.03.2019 16:39

    Котлин, котлин, котлин… Да неужели, в первый раз слышу!)