Является ли Groovy синтаксис точным расширением синтаксиса Java? - PullRequest
31 голосов
/ 25 ноября 2010

Будучи программистом на Java, у меня нет опыта работы с Groovy, но в последнее время я часто использую Groovy для расширения Maven (используя GMaven).До сих пор я мог использовать весь необходимый Java-код в Groovy с добавленным сахаром Groovy (методы метакласса, дополнительные операторы, замыкания).Мои знания Groovy далеко не полны, но мне они нравятся, особенно для сценариев (я немного осторожен с использованием нестатического типизированного языка в сценарии предприятия, но здесь это не тема).

В любом случае, вопрос таков:

Является ли каждый бит действительного кода Java автоматически корректным кодом Groovy? (Я говорю об исходном коде, а не скомпилированных классах, я знаю, что Groovy может взаимодействовать сКлассы Java.) Или в Groovy есть недопустимые конструкции Java?Возможно, зарезервированное ключевое слово Groovy, которое можно использовать в качестве идентификатора в Java, или что-то еще?Или Groovy специально спроектирован так, чтобы быть на 100% совместимым с Java?

Ответы [ 4 ]

21 голосов
/ 25 ноября 2010

Неа.Ниже приведены ключевые слова в Groovy, но не в Java:

any    as     def    in     with

Кроме того, delegate и owner не являются ключевыми словами, но имеют особое значение в замыканиях и могут сбить вас с толку, если вы не будете осторожны.

Кроме того, существуют некоторые незначительные различия в синтаксисе языка.С одной стороны, Java более гибка в отношении того, где в объявлениях встречаются скобки массива:

public static void main(String args[]) // valid java, error in groovy

Groovy также анализируется по-разному.Вот пример:

public class Test {
    public static void main(String[] args) {
        int i = 0;
        i = 5
        +1;
        System.out.println(i);
    }
}

Java напечатает 6, groovy напечатает 5.

Несмотря на то, что groovy в основном совместим с исходным кодом с java, есть много угловых случаев, которые не совпадают,Тем не менее, он очень совместим с кодом, который люди действительно пишут.

17 голосов
/ 25 ноября 2010

Это не так.

Моя любимая несовместимость: буквенные массивы:

String[] s = new String[] {"a", "b", "c"};

В Groovy в фигурных скобках в этом контексте следует ожидать закрытие, а не буквальный массив.

12 голосов
/ 25 ноября 2010

На сайте Groovy есть страница , на которой документируются некоторые различия, и другая страница, на которой перечислены ошибки (например, в строке перевода строки)

и другие вещи, например, Groovy не поддерживает циклическую конструкцию do...while

5 голосов
/ 26 ноября 2010

Другие уже приводили примеры синтаксиса Java, который недопустим в Groovy (например, литеральные массивы). Стоит также помнить, что некоторый синтаксис, который является допустимым в обоих, не означает одно и то же в обоих языках. Например в Java:

foo == bar

тесты на идентичность, т. Е. foo и bar оба ссылаются на один и тот же объект? В Groovy этот тест на предметное равенство, то есть возвращает результат foo.equals(bar)

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