Привет, Хабр! Мы в компании 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 на всех стриминговых платформах:
Комментарии (20)
Vlafy2
21.12.2023 19:23"Сделать задачу" - где это таких делателей делают? Косноязычие вперемешку с английскими словами - ужас.
Да и не понятно, почему С++ - несчастный. Скорее уж эти горе-программисты на всяких котлинах несчастные.
Dancho67
21.12.2023 19:23Потому-что никто из них программистом профессиональным и не является, кроме говорящей головы. Я люблю Котлин, но когда такие персонажи как Нозик, начинают открывать рот, появляется неосознанное чувство отвращения, от того мне пытаются что-то впарить.
nameisBegemot
21.12.2023 19:23Я не люблю котлин. Джава зе бест
odisseylm
21.12.2023 19:23После года использования Котлина, джава - это просто боль (примитивный древний язык, который давно морально устарел - нет проверки nullability, многие операторы не являются expression, нет immutable коллекций, и тд и тп).
nameisBegemot
21.12.2023 19:23Это как заменить настоящие кубинские сигары, которые нещадно жгут лёгкие на новомодный вейп. Ну типа приятнее, жижи всякие имеются. Но оставаться настоящим важнее
Dancho67
21.12.2023 19:23Это если продолжать писать джаву, но на котлине. А если через боль и слезы начать писать прямо kotlin way код, это равноценно отказу от курения вообще и вернуться потом желания не возникает, если ты проходишь этот путь до конца.
nameisBegemot
21.12.2023 19:23Это все про личные предпочтения. В реальности пишут на том, за что платят деньги.
Джава,лично для меня - чисто для себя. Я на нем даже не зарабатываю. И котлин мне, лично мне видится как надстройка для джавы, сахар. Но если будут за него платить, то это меняет дело
odisseylm
21.12.2023 19:23Вы, чтобы быть настоящим суровым мужиком, переходите сразу на байткод - вот там будет 100% понимание кода! И оптимизировать можно будет))
nameisBegemot
21.12.2023 19:23Ну ассемблер есть, тоже для души может подойти. Есть в этом что-то настоящее
ParaMara
21.12.2023 19:23Первый — как better Java.
Java - это особый мир, может и так, но тут я недоумеваю - где Java там и работа на дядю, а где на дядю - там тот язык на котором писать прикажут. Какая разница чего там better?
Но JetBrains и профессиональное сообщество прикладывают много усилий, чтобы Kotlin ассоциировался не только с мобильной разработкой.
Так и есть наверно, раз в статье написано. Но успехов они пока не достигли. В смутном сознании после не поставленного ковида, решил сравнить дюжину языков программирования, ибо и тут верить никому нельзя, лучше пусть глупый опыт, но свой. Так сравниваю 11, Котлин выпал - терпение лопнуло раньше чем IntelliJ Idea закончила чего-то там архиважное для хелловорлда индексировать.
Котлин натуральный то был, по докам нужно Идею поставить, темплетом приложения озаботиться, подождать… тут я всё и снёс. Тот же Swift (раз уж он и в статье к слову пришёлся) хоть и менее кросс-платформенный, только Эппл да Линукс и может быть никому не нужные форточки, но на Линукс работает изумительно.
Состояние Котлин напоминает мне двигавшийся по инерции C# времени раннего MAUI, когда тот был привязан к VS - вроде и интересно, а близко подходить не хочется. C# выправился, чего и Котлину желаю.
NeoCode
В языке много интересного и полезного, но есть и странное: return из лямбды по умолчанию возвращает управление из объемлющей функции! Я вот реально удивился такому. Естественно, такую лямбду нельзя возвратить, она оказывается как-бы гвоздями прибита к объемлющей функции.
Beholder
В качестве альтернативы можно использовать анонимные функции.