Какие функции Kotlin недоступны в статически скомпилированном Groovy?

Kotlin и Groovy выглядят как очень похожие языки с очень похожими функциями, если мы скомпилируем Groovy статически. Какие функции, помимо нулевой безопасности, у Коттина отсутствуют в 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.