java - guide - groovy syntax
¿La sintaxis de Groovy es un superconjunto exacto de la sintaxis de Java? (4)
Hay una página en el sitio de Groovy que documenta algunas de las diferencias, y otra página que enumera los errores (como la cosa de la nueva línea)
También hay otras cosas, un ejemplo es que Groovy no es compatible con el do...while
looping build
Siendo un programador de Java, realmente no tengo un fondo Groovy, pero uso Groovy mucho últimamente para extender Maven (usando GMaven). Hasta ahora, podría usar todo el código Java que necesito en Groovy con el agregado de azúcar Groovy (métodos de metaclase, más operadores, cierres). Mi conocimiento de Groovy está lejos de ser completo, pero me gusta, especialmente con fines de scripting (soy un poco cuidadoso con el uso de un lenguaje tipado no estático en un escenario empresarial, pero ese no es el tema aquí).
De todos modos, la pregunta es:
¿Cada código válido de Java es válido automáticamente para el código de Groovy? (Estoy hablando de código fuente, no de clases compiladas, sé que Groovy puede interactuar con clases de Java). ¿O hay construcciones de Java que son ilegales en Groovy? ¿Quizás una palabra clave reservada de Groovy que podría usarse como un identificador en Java, o algo más? ¿O Groovy ha sido deliberadamente diseñado para ser 100% compatible con Java?
No lo es
Mi incompatibilidad favorita: matrices literales:
String[] s = new String[] {"a", "b", "c"};
En Groovy, se debería esperar que las llaves en este contexto contengan un cierre, no una matriz literal.
Nop. Las siguientes son palabras clave en groovy, pero no en Java:
any as def in with
Además, si bien no son palabras clave, el delegate
y el owner
tienen un significado especial en los cierres y pueden causar tropiezos si no tiene cuidado.
Además, hay algunas diferencias menores en la sintaxis del lenguaje. Por un lado, Java es más flexible acerca de dónde se encuentran las llaves de matriz en las declaraciones:
public static void main(String args[]) // valid java, error in groovy
Groovy también se analiza de forma diferente. Aquí hay un ejemplo:
public class Test {
public static void main(String[] args) {
int i = 0;
i = 5
+1;
System.out.println(i);
}
}
Java imprimirá 6, groovy imprimirá 5.
Aunque Groovy es en su mayoría compatible con Java, hay muchos casos de esquina que no son lo mismo. Dicho esto, es muy compatible con el código que las personas realmente escriben.
Otros ya han dado ejemplos de sintaxis de Java que es ilegal en Groovy (por ejemplo, matrices literales). También vale la pena recordar que alguna sintaxis que es legal en ambos, no significa lo mismo en ambos idiomas. Por ejemplo en Java:
foo == bar
pruebas de identidad, es decir, ¿ foo
y bar
refieren al mismo objeto? En Groovy, esto prueba la igualdad de objeto, es decir, devuelve el resultado de foo.equals(bar)