Есть ли «строгое использование» для Groovy? - PullRequest
12 голосов
/ 21 октября 2010

Я помню по моим Perl-дням оператор " строгий ", который заставляет среду выполнения выполнять дополнительные проверки. Есть ли эквивалент Groovy?

Мне не нравится, когда во время выполнения укушается то, что может быть обнаружено при компиляции, например, передача слишком малого количества аргументов в конструктор.

Ответы [ 3 ]

19 голосов
/ 24 июня 2012

Groovy 2.0 теперь имеет дополнительную проверку статического типа. Если вы поместите аннотацию @groovy.transform.TypeChecked в класс или метод, groovy будет использовать строгие правила статической типизации, подобные Java.

Кроме того, есть еще одна аннотация @groovy.transform.CompileStatic, которая похожа, за исключением того, что она идет дальше и фактически компилирует ее без динамической типизации. Байт-код, сгенерированный для этих классов или методов, будет очень похож на прямой Java.

Эти аннотации могут применяться к отдельному классу или методу:

 import groovy.transform.TypeChecked

 @TypeChecked
 class MyClass {
      ...
 }

Вы также можете применять их глобально ко всему проекту, не добавляя аннотации к исходным файлам с помощью скрипта конфигурации компилятора. Скрипт конфигурации должен выглядеть примерно так:

withConfig(configuration)  {
    ast(groovy.transform.TypeChecked)
}

Запустите groovy или groovyc с параметром командной строки -configscript:

groovyc -configscript config.groovy MyClass.groovy

Более подробная информация содержится в руководстве Groovy:

3 голосов
/ 21 октября 2010

Есть ли эквивалент Groovy?

Не то, что я знаю.

Мне не нравится, когда меня кусают время выполнения по тому, что можно обнаружить на компиляция, как прохождение слишком мало аргументы для конструктора.

Тогда Groovy, вероятно, вам не подходит, и вам следует использовать что-то вроде Java или C #. В качестве альтернативы, существует версия Groovy, известная как Groovy ++, в которой гораздо более строгая проверка типов, но я не считаю ее достаточно зрелой для промышленного использования.

IntelliJ (и, возможно, другие IDE) предоставляет много предупреждений о хитром Groovy-коде. Хотя эти предупреждения не мешают компиляции, они почти дают вам лучшее из обоих миров, то есть безопасность статического языка и гибкость динамического языка

0 голосов
/ 21 октября 2010

Нет, такого нет и быть не может.Perl «строгое использование» только предотвращает использование необъявленных переменных (и некоторых очень специфичных для Perl вещей, которые, я думаю, не имеют эквивалентов в Groovy).

В динамических языках, таких как Groovy, «передача слишком малого количества аргументов в конструктор» принципиально не то, что компилятор может обнаружить, потому что определения классов могут быть изменены во время выполнения посредством метапрограммирования.Кроме того, у вас обычно нет информации о типе, необходимой для того, чтобы знать, какой класс искать.

Если вы хотите, чтобы максимальные проверки выполнялись во время компиляции, используйте статически типизированный язык без метапрограммирования, например Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...