Комментарии 17
Не холивара ради, а чисто практический интерес: Котлин vs Java 9 в контексте серверных приложений и Spring Boot. Всё же, какие плюсы? Если честно, не очень пойму. Вы пишите об выразительности, в чём она заключается? Проще data классы делать? Ещё что-то?
Функциональные подход я бы пока не стал рассматривать реально, так как в продакшене, я думаю, пока ни у кого такого нет.
Не нужно противопоставлять Kotlin и Java 9, они прекрасно уживаются вместе. Еще в релизах Kotlin 1.1.3-4 было указано на счет поддержки Java 9. Да и сам Андрей Бреслав в своих выступлениях говорил, что как только выйдет новая версия jvm они сделают необходимые доработки для ее поддержки.
А вот на счет Kotlin vs Java можно говорить очень много и это тема куда больше одного поста. Да и все усложняется тем, что для разных людей одна функциональность будет являются преимуществом, а для других — недостатком.
Для меня Kotlin это не только data class
, но и опциональные типы, функции первого порядка, DSL, делегаты, удобные функции расширения, встроенная поддержка иммутабельности, корутины, type aliases
и многое другое. Но самое важное это то, что в коде потом проще разбираться, его проще рефакторить и, как показала практика, в Kotlin есть приятная особенность. Он помогает выявлять "плохо написанный код".
Java конечно стремится перенять многие хорошие вещи в язык (тот же Project Amber, Project Loom), но процесс идет медленно и если посмотреть на тот же Stream API, насколько "трудно" встраивали в язык и как он теперь выглядит (для сравнения реализация в Kotlin), то можно примерно понять как будет выглядеть Java потом. Да и нужно обновление языку, который появился еще в 1995, но отбросить все то что уже есть для Java было бы кощунством. Поэтому тут Kotlin подходит в самый раз. Получаем современный язык, с отличным тулингом не бросая весь свой накопленный опыт с Java.
Да и синтаксис Kotlin ближе к тому как выглядят многие другие современные языки (Rust, Golang, Scala, Swift). Везде типы необязательны, типы справа. И даже это небольшое изменение значительно улучшает читабельность. Но многие против будут так изменить Java и даже если и добавят JEP 286 то будет выглядеть не на много лучше чем сейчас.
Надеюсь ответил на ваш вопрос.
когда-то заморочился с kotlin dsl для gradle, но по выходу к сожалению такой же по размеру и читаемости код…
Kotlin Dsl только стремится быть таким же с виду как Groovy Dsl. Цель перехода на Kotlin лишь в том чтобы получить статическую типизацию и поддержку студии. Хотя и в Groovy можно тоже самое сделать при желании… но ведь никто не заморачивается и в этом вся проблема.
Можно посмотреть [мнение] Cédric Champeau (http://melix.github.io/blog/2016/05/gradle-kotlin.html) на счет Kotlin и Gradle.
Спринг какой? Запущенный с embedded Tomcat? Jetty? Или может уже тестировали новую возможность запускать приложение на Netty или Undertow?
А сам Koltin не ухудшает производительность. Конечно за некоторые абстракции приходится немного платить, но если все переписать в стиле Java, то думаю вы с трудом сможете увидеть разницу в производительности.
Посмотрите как выглядит Kotlin в байткоде, там никакой магии нет. Все конструкции достаточно просты и производительность приложение зависит больше от используемых решений и подходов. А так, код на Kotlin может быть и быстрее аналогичного на Java, если, например, даже перейти от Stream API на использование стандартных расширений для коллекций (при условии что коллекции небольшого размера).
К вопросу о производительности, хотел добавить к предыдущему ответу:
Для предыдущего Russian Ai Cup 2016 я делал первое решение на Java, которое в целом выдавало неплохой fps при запуске, на локальной машине. Как только появилась возможность отправлять решение на Kotlin, я конвертнул весь код на него и fps не изменился.
Если интересно, ссылки на код: версия на Java, версия на Kotlin. И если хотите сравнить 1 в 1, то берите крайний коммит Java версии, и один из первых коммитов Kotlin версии.
Добрый день.
встречали ли вы какие-либо баги\проблемы\странное поведение компилятора kotlin
На Kotlin я пишу еще начиная с Beta и проблем было много :)
Но в основном это были детские болячки и краши плагина студии. Сейчас все намного стабильнее и багов давно не встречал. И еще ни разу не было чтобы возникающий баг трудно было обойти.
А из интересных багов, что я встречал, примерно год назад у меня крашился компилятор Kotlin, когда из функции с tailrec фозвращалась nullable
лямбда (внутри который был вызов этой же функции) для которой была указана другая лямбда, если первая равна null
. Проблему решил в итоге переходом на возвращение результата выражения if
.
С какими недостатками этого языка сталкивались вы?
В Kotlin нет ключевого слово static
, вместо него нужно добавлять аннотацию @JvmStatic для методов в object
и companion object
. С ключевым словом, возможно, было бы лучше.
На kotlinlang есть дискусия по этому поводу.
Еще не хватает pattern matching, похожего на то, что есть в Scala. Но тоже не сильно мешается,
и хоть без него код получается чуть более многословным, но в то же время с ним проще разобраться потом.
В остальном, наверное, не хватает мелких вещей, которые еще могут появиться :)
Например, хотелось бы чтобы можно было оставлять запятую после последнего аргумента, тогда редактирование будет проще и т.п.
Большая миграция