company_banner

Kotlin как будущее разработки приложений на Android



    С момента появления версии 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 Станиславом Хижняком, за что ему огромное спасибо!
    Mail.ru Group
    1511,00
    Строим Интернет
    Поделиться публикацией

    Комментарии 44

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

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

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

          +3
          Instant Run до сих пор работает криво. Как и hot reload (поправьте, если ошибся с название) под Flutter.
          Задумка классная, но реализация пока ещё сыровата… имхо
          +1
          Для общего случая есть вот такие решения
            0
            У Flutter есть. Просто огонь.
            +2

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

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

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

                  0

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

                  0
                  Пишем у себя в стартапе уже полгода на Ktor. Замечательная вещь, намного лучше Spring
                  +2

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

                    +2

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

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

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

                          0
                          О_о Что я пропустил? Я вроде за флаттером слежу и такого не заметил. Вы не путаете случайно с фуксией? Под нее да, и на свифте вроде как планируется возможность, и на Java + kotlin, и на rust, и еще на чем то вроде… Другое дело что подозреваю это все равно с флаттером придется интегрировать. Либо рисовать свой UI.
                            0
                            Эмм… а разве во Flutter не на Dart пишут?
                          0
                          Вы ведь понимаете, да, что когда состоится релиз фуксии(если вообще будет да и будет ли под мобилки), то ни один заказчик в здравом уме не будет переписывать с нуля приложение на flutter, возможно, он будет писать новое приложение на flutter, но тут нужно искать разработчиков, которых толком пока нет, а нет их из-за молодости flutter.
                          Не забывайте: выпуск фуксии не означает мгновенный закат Android. Вспомните, сколько устройств на Android сейчас существует? И что с ними делать, а сколько ещё будет выпущено и т.д, и т.п.
                          И фуксия поддерживает Android приложения, а значит ничего не изменится для разработчиков.
                            0
                            Вспомните, сколько устройств на Android сейчас существует?

                            Вспомните сколько устройств существовало на Symbian, и где этот Symbian сейчас (он кстати тоже поддерживал приложения на Java хоть и ME). Закат очень вероятен, к примеру Фуксия еще не вышла, но китайцы один аппарат уже тестируют.
                          0
                          А потом Гугл выпускает свой телефона на Фуксии и весь мир замирает в напряжении…
                            0
                            Kotlin? Null-safety? Да бросьте…
                            image
                              +1
                              И это, уверен, было где нибудь на интеропе с java.
                                0

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


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

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


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

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

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

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

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

                                      0
                                      Ну в общем да, KNPE действительно не только в интеропе может быть брошен, но лично я !!.. применяю только ну уж в совсем крайних случаях. На мой взгляд слишком опасный оператор.
                                      З.Ы. С форматированием!!! у хабра конечно…
                                        0
                                        З.Ы. С форматированием!!! у хабра конечно…
                                        А вы в <code></code> заворачивали? (Или в `апострофы`, если Markdown включить)
                                          0
                                          Нет. Но блин, преобразовывать два восклицательных знака в три — мне вообще не приходит в голову зачем это.
                                            0
                                            Наверное, потому что в русской пунктуации такое сочетание знаков не допускается.
                                    0
                                    println(map[«foo»]!!.length)

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


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

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

                                  0
                                  дык, использование обьекта из java кода с оператором!!! — это единственный случай, когда выбрасывается такое исключение, насколько я понимаю.
                                  Во всех остальных будет либо IllegalCastException, либо ничего не будет.
                                  0
                                  Ух ты как хорошо, какая наглядная картинка!

                                  А почему тогда tiobe index показывает, что Java занимает 1 место среди языков, а Kotlin проигрывает даже таким артефактам как Ada и Lisp, занимая 39 место?
                                    0
                                    Вот кому кому — а tiobe я не очень верю. Правда кому верить — тоже неясно. Tiobe если не ошибаюсь завязан на гуглеж по теме, а лично я гуглю либо по android sdk, либо по java, по фану еще иногда по разным языкам, а по котлину хорошо если несколько раз искал что то. java, python, js и еще многие языки однозначно популярнее котлина, но если говорить об андроид разработке — то исходя из требований котлин как бы не уже популярнее java.
                                      +1
                                      Статистика. Она зависит от того, что и каким образом собирать. Если у меня есть 9 проектов на Java и один новый на Kotlin. При этом Java проекты правлю только когда ошибки возникают, а Kotlin активно разрабатываю, то по статистике у меня Java занимает 90%, а Kotlin — 10%. А вот если собрать статистику по числу новых строчек кода, всё может оказаться совсем наоборот. При этом в первом и втором случае будут одни и те же проекты.
                                      +2
                                      Интересно, чувствуется прогресс в разработке. А интересно, можно ли писать бэкэнд на котлине и насколько это оправдано, а то весь акцент на Андроиде.
                                        0
                                        Писать бэкэнд можно, пока с небольшой болью, но можно. Надеюсь в скором времени все устаканится, обрастет поддержкой всех фреймверков, а то терпеть Java уже не хватает сил.
                                          +2
                                          Так Scala же есть. Он мне, кстати, больше чем Kotlin импонирует
                                            0

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

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

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

                                          +1
                                          С подключением!
                                          А если серьезно, то мне очень нравятся такие статьи в стиле ретро в 2019. Скажите планируются ли статьи по реализации MVP/MVVM и плюсах Clean Architecture?
                                            0
                                            Про MVVM уже давно написано: antonioleiva.com/mvvm-vs-mvp
                                            и снято, там есть видео от автора.
                                              +2
                                              Я несерьезно же. Вся статья это по факту копипаста JetBrain презентаций 2х-3хлетней давности. Только без конкретики, опыта, без чего-то нового. Просто вода с целью хоть кого-то сподвигнуть на соответствующие вполне конкретные курсы.
                                            0
                                            Котлин, котлин, котлин… Да неужели, в первый раз слышу!)
                                              0
                                              Котлину еще рано для проектов которые проходят множество сертфификаций(мед. проекты)так как еще не законченая спецификация(не документация) языка и она не дает проходить множество этапов проверок. Так же нужны knowledge holders для код ревью, а к сожелению, тех-лиды которые имеют по 10+ лет стажа на Java, не очень сильно ходят переходить на Kotlin и пишут по старинке на Java, так как очень часто они имеют влияние.

                                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                              Самое читаемое