Kotlin и Groovy выглядят как очень похожие языки с очень похожими функциями, если мы скомпилируем Groovy статически. Какие функции, помимо нулевой безопасности, у Коттина отсутствуют в Groovy?
Какие функции Kotlin недоступны в статически скомпилированном Groovy?
Ответ 1
Kotlin - это язык JVM, который ИМО пытается улучшить Java в функциях и краткости, оставаясь при этом обязательным и статическим. Groovy имеет аналогичную концепцию, за исключением того, что решил пойти динамично. В результате, некоторые функции языка будут похожи.
Вот некоторые отличия, которые я знаю о
- Static vs Dynamic: Поскольку Groovy был разработан как динамический язык и @CompileStatic, в то время как большая аннотация (я использую ее много), была добавлена позже. Его функция немного заперта, и это не принуждает людей котироваться статически. Он не используется повсеместно (например, мои тесты Spock, похоже, не скомпилируются с ними). Иногда даже с ним на Groovy все еще кажется, что время от времени возникает странное динамическое поведение. Котлин 100% статический, а динамика не вариант.
Есть еще ряд других функций, которые есть. Я бы рекомендовал вам посмотреть ссылку, и вы можете заметить еще несколько, например. https://kotlinlang.org/docs/reference/
- Классы данных - лаконичны с функцией копирования (немного похожими на классы case в Scala)
- Нулевая проверка безопасности, о которой вы упомянули (что является большим профи)
- Возможность уничтожать элементы. val (имя, возраст) = человек
- Функции более высокого порядка, определенные как "fun doStuff (body: Int → T)): T". Которые намного лучше, чем Groovy Закрытие ИМО. (очень похоже на Scala)
- Проверки типов и умные приведения хороши: https://kotlinlang.org/docs/reference/typecasts.html
- Объекты Companion, таким же образом Scala также пытается удалить статические методы из классов, Kotlin пытается сделать то же самое.
- Запечатанные классы для ограничения наследования (снова Scala имеет что-то подобное)
- Подтип "Ничего", где все это супертип. (еще одна важная концепция в Scala).
- когда выражения для базового соответствия шаблонов: https://kotlinlang.org/docs/reference/control-flow.html
Как вы можете видеть, он заимствует с других языков, кроме Groovy. Они попытались сделать вишневое множество отличных функций, пытаясь сделать хороший язык. Естественно, Groovy имеет свою доброту. Я сосредоточил внимание только на том, что имеет Котлин, а не наоборот.
Еще один плюс заключается в том, что созданный разработчиком IDE компилятор очень быстр и имеет отличную поддержку IDE. Не сказать, что Groovy не имеет хорошей поддержки, но мой текущий проект требует много времени для компиляции, а метод рефактории всегда предполагает, что вы кодируете динамически.
Я бы порекомендовал вам опробовать Koans, чтобы узнать, какие функции этого языка вам нравятся, и как он сравнивается с Groovy (<а3 > ).
Ответ 2
Kotlin, разработанный как статически типизированный язык, с отличной системой типов и другими преимуществами статически типизированного языка. Groovy - на первом месте - динамически типизированный язык, а только тогда - статически.
Когда вы включаете компиляцию static в Groovy, вы получаете только java с синтаксическим сахаром. С другой стороны - Котлин в своей типовой системе имеет два типа ссылок: с нулевым и неизменяемым, поэтому вы можете писать код с меньшим количеством NPE, Если вы спрашиваете только об одной функции - об этом.
Вторая отличная особенность Kotlin - она не делает никаких неявных преобразований, с другой стороны - Groovy неявно преобразует double в bigdecimal и т.д.
Но у kotlin есть много других функций, таких как умные приведения, ADT (doc), type- безопасных строителей, абстракции с нулевой стоимостью и, наконец, отличная поддержка IDE.
Также я не уверен о качестве Groovy типа-вывода (в закрытии, например, нам нужно дополнительные аннотации, meh), но в котлинском типе-умозаключение работают как шарм, без каких-либо аннотаций в каждом мире языка.
Итак, статически типизированная компиляция в Котлине - гражданин первого класса, в Groovy - not.