/cc
@JBaruch Язык хороший. Когда появился в 2016м, в него положили кучи приятных вещей, которые облегчали людям жизнь. По эргрномике язык (не окружения - ide, тулзов, библиотек) был близок к его тогдашним современникам - TS и Swift. Но имхо развиваться дальше он не стал так же быстро, как TS, и после TSа писать на Котлине очень кринжово. Вроде бы все так, но шаг вправо-влево и не хватает мелочей.
Например, array и object destructuring в Котлине работает не по именам, а по позициям полей. Штааа???
У меня есть класс, в нем
id, username, email
типов
int, string, string
. Я в коде пишу
val (id, username, email) = user;
все круто.
Теперь прилетяет реквест юзерам роли добавить. Я добавил поле
role: string
после юзернейма, и теперь в строке выше в переменную email попадет роль. Компилятор и Идея мне ничего не скажет. Получается, позиционные аргументы я не могу юзать без опасений. И я в 2020м году должен писать кода вида
val email = user.email;
как какой-то крестьянин.
Еще напрягает то, как в языке сделаны Корутины. Ты делаешь контекст, в нем уже можешь awaitить. Но из-за того, что асинхронный код в языке явно не виден, в Идее для мест разрывов управления слева добавлен еще один столбик гаттеров и рисуются такие извилистые стрелки. Язык создавался для JVM - среды, где полно синхронного io, и есть большой риск помешать в одном куске кода бликирующие вызовы и корутины. Явно нужно было для корутин сделать синтаксис. Его не сделали, и получается, что в свою среду разработки пришлось добавлять костылики, чтоб визуально асинхронщина была видна. Ну а если ты Котлин пишешь не в их ide, то ссзб, страдай.
Также мне как человеку, который 10 лет под JVM не писал, был непонятен зоопарк с Фьючерами. Чтобы юзать корутины, нужно все джавашные фьючи конвертить в котлиновские. Чем джавашные не угодили я хз. Но даже если и так, что, нельзя автогенерить при компиляции код для конверсии? И нельзя было его сделать для Scala/Akka фьюч и их аналогов в Clojure и мб Groovy (хз есть ли они там). А так пришлось писать дополнительные методы для конвертации ручками.
Опять же. В один мавен артифакт нельзя положить код на Java, Scala, и Kotlin сразу. Почему? Я чего-то думал, что все компилится в .class-файлы и они совместимы между собой. Почему все эти "языки будущего" на JVM за 6-17 лет не смогли друг с другом уживаться, я в упор не понимаю. Но я должен ради них дробить проект на отдельные артифакты, писать билд-скрипты для каждого и для них всех общий.
Есть вопросы по тулингу. Я не хочу в 21м веке гонять форматры-линтеры в ide ручками. Я хочу, чтоб а прекоммит хуке у меня все форматилось и линтилось само собой. Почему JetBrains не предоставляет форматилку-линтилку в виде cli-тулзы? Они что, предлагают мне в CI поднимать в доккере IDEA и по ней чем-то Силиниум-подобным кликать кнопки, чтоб провалидировать, что код в пул-реквесте правильно отформатирован? Нашлись конечно отчаянные ребята в Австралии, которые написали свой линтер. Но не понятно, как гарантируется его совместимость с форматтером, который в Idea зашит.
Я пописал на Kotlin неделю в Виксе в 2019. После TS выглядело как привет мой 2015й. Я понимаю, что им восхищаются андроидщики, тк все ж не Java 6. Но имхо надо стараться лучше.