Привет, Хабр! Мы в компании Friflex запустили подкаст «Гости из IT». Вместе с экспертами из разных областей IT разбираемся в технологиях и обсуждаем, как они меняют нашу жизнь и работу. 

Сегодня размышляем про Kotlin. Почему его любят, обвиняют в сахарности и не могут заключить в рамки классического определения. Своими мыслями делятся эксперты по Kotlin: Александр Нозик, директор центра научного программирования и руководитель российской Kotlin-группы, и Александр Соколинский, популяризатор Kotlin в комьюнити разработчиков. А модерируют дискуссию блогер Алексей Гладков и Петр Чернышев из Friflex.

Что такое Kotlin? 

Александр Соколинский: Язык Kotlin получил название в честь острова Котлин, который находится недалеко от Санкт-Петербурга. В JetBrains (компания-разработчик Kotlin) Kotlin называют default language. Если нужно сделать какую-то задачу, то, скорее всего, ее можно написать на этом языке. Это может быть что угодно: телеграм-боты, приложение для iOS…

Александр Нозик: Бесполезно давать Kotlin классическое определение — статически типизированный, объектно-ориентированный язык программирования. Потому что вы можете писать в разных парадигмах на всех современных языках. Даже на несчастном C++. Вы можете заниматься функциональным программированием на Python. Только у Kotlin шире возможности. 

Есть два разных Kotlin. Первый — как better Java. Вы берете обычную объектно-ориентированную java-программу и переписываете ее на более удобном языке. Это то, что люди называют сахаром. Все проще пишется и легче собирается. 

А есть idiomatic Kotlin, он ближе к функциональным языкам. Его дизайн библиотек, дизайн API, подход к проектированию и модуляризации отличается от Kotlin Java. Можно писать как на функциональном, и как на процедурном. 

Вообще проще назвать области, где Kotlin не применяют. Например, MBD (Model-based definition). Потому что Kotlin — это безопасный язык со сборкой мусора. А на MBD это часто мешает. 

Что происходит с Kotlin?

Александр Соколинский: Kotlin играет большую роль в «мобилках». Но JetBrains и профессиональное сообщество прикладывают много усилий, чтобы Kotlin ассоциировался не только с мобильной разработкой. Если посмотреть опросы профессионального сообщества, то только половина опрошенных считает, что основная деятельность Kotlina — «мобилки. Тут много бэкэнда, просто его не видно. 

Если говорить о перспективе, то Kotlin не единственный. У нас есть много языков последнего поколения: Swift, Rust, Julia, TypeScript.  

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

Можно ли переманить разработчиков на Kotlin?

Алексей Гладков: Все зависит от языка, с которого переманивать. Если с Java, то тут все очень просто. Kotlin — это более удобная Java. Он позволяет сделать все то же самое, с теми же затратами производительных ресурсов. При этом писать гораздо быстрее и удобнее. 

Если мы говорим про Swift, нельзя забывать, что он привязан к iOS. А Kotlin — более свободный язык.

А вот разработчиков на Rust или SciTE переманить не удастся, потому что в системном программировании у Kotlin нет лидирующих позиций. 

Kotlin — самый сахарный язык? 

Александр Соколинский: При проектировании в Kotlin не добавляют фичи просто ради удобства. Фичи в Kotlin вписываются в общее направление языка, комбинируются между собой и создают единую философию, систему идиом. Поэтому я считаю, что обвинения Kotlin в сахарности несправедливы.

Если в Kotlin будут мультиресиверы, то другие, более сахарные языки, не появятся.

Александр Нозик: Часто слышу такой аргумент в отношении Kotlin: «Смотрите, тут синтаксический сахар». Но это неправда. Я много занимаюсь мультиплатформенными библиотеками и дизайном API. 

Мне говорят: «Да, эти вещи можно написать на Java». А я отвечаю, что любую программу можно писать на ассемблере. Программа, написанная на низкоуровневом языке, например, на С или на ассемблере, совсем по-другому выглядит и по-другому организована. Так и у программы, написанной с использованием фич Kotlin, абсолютно другой дизайн модулей и вашего приложения.

Например, в мобильной разработке все молятся на dependency injection (DI). В бэкенде DI встречается гораздо реже. Потому что фичами Kotlin можно заменить то, что делается на уровне библиотек в мобильной разработке. Не буду лезть в эту глубокую кроличью нору, но я абсолютно не согласен с мнением, что фичи языка — это синтаксический сахар.

_____________________

В чем основная идеология Kotlin? Как перейти на него с другого языка, и причем тут дядюшка Боб? Смотрите в полной версии подкаста.

И слушайте эпизод подкаста про Kotlin на всех стриминговых платформах:

Яндекс Музыка

Apple Podcasts

Google Подкасты

Castbox

PocketCasts

Overcast

Castro

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


  1. NeoCode
    21.12.2023 19:23

    В языке много интересного и полезного, но есть и странное: return из лямбды по умолчанию возвращает управление из объемлющей функции! Я вот реально удивился такому. Естественно, такую лямбду нельзя возвратить, она оказывается как-бы гвоздями прибита к объемлющей функции.


    1. Beholder
      21.12.2023 19:23

      В качестве альтернативы можно использовать анонимные функции.


  1. Naf2000
    21.12.2023 19:23

    Деревья выражений есть?


    1. AndanteMQ
      21.12.2023 19:23

      Это с какого языка понятие?



    1. D7ILeucoH
      21.12.2023 19:23

      Замыкание вкупе с when перекрывает все смелые фантазии, недоступные в других языках


      1. Naf2000
        21.12.2023 19:23

        Я может чего не понимаю, но могли бы вы свою мысль развернуть?


    1. Dancho67
      21.12.2023 19:23

      Если я правильно понял, деревья выражений в шарпе используются как надстройка для работы linq? Если нет, поделитесь областью их применения.


      1. Naf2000
        21.12.2023 19:23

        Именно так. Как dsl язык запросов, транслируемый в SQL и контролируемый компилятором.


  1. Vlafy2
    21.12.2023 19:23

    "Сделать задачу" - где это таких делателей делают? Косноязычие вперемешку с английскими словами - ужас.

    Да и не понятно, почему С++ - несчастный. Скорее уж эти горе-программисты на всяких котлинах несчастные.


    1. Dancho67
      21.12.2023 19:23

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


  1. Ratenti
    21.12.2023 19:23

    А есть подтверждение, что любят?


  1. nameisBegemot
    21.12.2023 19:23

    Я не люблю котлин. Джава зе бест


    1. odisseylm
      21.12.2023 19:23

      После года использования Котлина, джава - это просто боль (примитивный древний язык, который давно морально устарел - нет проверки nullability, многие операторы не являются expression, нет immutable коллекций, и тд и тп).


      1. nameisBegemot
        21.12.2023 19:23

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


        1. Dancho67
          21.12.2023 19:23

          Это если продолжать писать джаву, но на котлине. А если через боль и слезы начать писать прямо kotlin way код, это равноценно отказу от курения вообще и вернуться потом желания не возникает, если ты проходишь этот путь до конца.


          1. nameisBegemot
            21.12.2023 19:23

            Это все про личные предпочтения. В реальности пишут на том, за что платят деньги.

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


        1. odisseylm
          21.12.2023 19:23

          Вы, чтобы быть настоящим суровым мужиком, переходите сразу на байткод - вот там будет 100% понимание кода! И оптимизировать можно будет))


          1. nameisBegemot
            21.12.2023 19:23

            Ну ассемблер есть, тоже для души может подойти. Есть в этом что-то настоящее


  1. ParaMara
    21.12.2023 19:23

    Первый — как better Java.

    Java - это особый мир, может и так, но тут я недоумеваю - где Java там и работа на дядю, а где на дядю - там тот язык на котором писать прикажут. Какая разница чего там better?

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

    Так и есть наверно, раз в статье написано. Но успехов они пока не достигли. В смутном сознании после не поставленного ковида, решил сравнить дюжину языков программирования, ибо и тут верить никому нельзя, лучше пусть глупый опыт, но свой. Так сравниваю 11, Котлин выпал - терпение лопнуло раньше чем IntelliJ Idea закончила чего-то там архиважное для хелловорлда индексировать.

    Котлин натуральный то был, по докам нужно Идею поставить, темплетом приложения озаботиться, подождать… тут я всё и снёс. Тот же Swift (раз уж он и в статье к слову пришёлся) хоть и менее кросс-платформенный, только Эппл да Линукс и может быть никому не нужные форточки, но на Линукс работает изумительно.

    Состояние Котлин напоминает мне двигавшийся по инерции C# времени раннего MAUI, когда тот был привязан к VS - вроде и интересно, а близко подходить не хочется. C# выправился, чего и Котлину желаю.