Groovy <<
Hola a todos.
Intente buscar una fuente en Internet donde me pudiera documentar nutridamente de operadores como ‘<<’, pero no logro encontrar nada, solo esta página () Les agradecería mucho si me pudieran decir alguna fuente de libre acceso o que palabras ocupar en google para recuperar resultados útiles.
Gracias por su tiempo.
- Inicie sesión o regístrese para enviar comentarios
Parece que es similar a Java
Pues por lo que veo funcionan igual que en Java, ya que cuentan con los mismos operadores de bits (según recuerdo -aunque es a lo que estoy dándole, no es un tema que domine-).
Sería bueno que @domix o @ezamudio, por mencionar algunos grooviers de aquí respondieran esta pregunta.
Los operadores se mapean a métodos
Sin entrarle mucho a una discusión profunda sobre lo que significa realmente "sobrecarga de operadores", es fácil entender que en Groovy, varios operadores se mapean a métodos que pueden aplicarse sobre diferentes clases de objetos como Numbers, Collections, Maps y otras estructuras de datos.
, que está mapeado al método
. Así, el código
se interpreta como
.
.
Uno de esos operadores es
Lo que realiza el método leftShift depende entonces del tipo de objeto que lo recibe, en este caso el objeto
Siguen algunos ejemplos:
Syntactic sugar causes cancer of the semicolon. Alan Perlis
Muchas gracias @bferro.
Gracias por la explicación, me quedo de tarea echarme un par de ejemplos para ver cómo se comporta otros operadores.
Saludos : )
Operadores Groovy
Tienes leftShift y rightShift que ya los viste, y además add, subtract, multiply, divide, para poder usar los operadores aritméticos. Tienes or y and para poder usar los bitwise, not para negar con signo de admiración (o tilde? no estoy muy seguro). Tienes también putAt y getAt para usar los corchetes como operador de lectura o asignación de alguna propiedad, tipo
.
No sé cómo le hiciste para no encontrar nada, porque "groovy operator overloading" me lleva a la página en Codehaus donde explican todo esto.
Overloading vs. Object Technology
Overloading vs Object Technology es el nombre de un artículo de Bertrand Meyer disponible aquí publicado en Journal of Object Oriented Programming en octubre de 2001.
El artículo comienza así:
"A C++ programmer said to Rabbi Shammai: “I promise to try object technology if you can explain the secret of objects while standing on one foot.
Rabbi Shammai whacked him on the head with a 10-by-2 ruler. He went to Rabbi Hillel who, standing on one foot, answered: “No overloading.
That is the secret of objects. All the rest is commentary.”"
Vale la pena leerlo.
Groovy
En el caso de Groovy me parece más inocua la sobrecarga de operadores porque no puedes definir los que quieras, sino solamente los que ya soporta Groovy. Si en tu clase implementas ciertos métodos como leftShift, rightShift, compareTo, etc entonces los puedes invocar con los operadores en código Groovy. Pero no puedes definir los que se te antojen, a diferencia de Scala donde sí puedes implementar métodos con el nombre de operador que se te antoje. Eso se presta para ciertos abusos y al final en vez de simplificar la lectura de código, la complica porque si no sabes qué hace el método :+ tienes que ir a la documentación, o confiar en que el autor de ese objeto haya seguido ciertos lineamientos y que entonces ese método se comporte igual que los de las colecciones de Scala, etc.