Novedades en Expression Language 3 (EL 3.0)
• jsp, java8, el, expression language, lambda expressions, java7, javaee7, jsf, java
Hace unos días se ha publicado la primera RC de Apache Tomcat 8 que incorpora como principal novedad la alineación con Java EE 7. Eso incluye algunas versiones superiores en las tecnologías web. Una de las novedades más interesantes es la actualización a la versión 3 del EL, el lenguaje de expresiones utilizado tanto con JSP como JSF.
La primera novedad, no funcional, es la especificación en sí. Ahora EL cuenta con una especificación propia y de hecho se ha modificado para poder ser un producto utilizado de manera independiente a cualquier tecnología. El JSR es el 341.
Ahora sí, centrándonos en las novedades efectivas:
- Expresiones lambda. Similares en sintaxis a las que, en principio, se usarán con Java 8 pero son específicas de EL (y no requieren, por tanto, Java 8). Ejemplos:
x->x+1
o(x,y)->x+y
- Llamadas a métodos estáticos, incluyendo constructores de clases. La sintaxis es la que esperamos intuitivamente:
classname.method
oclassname.attribute
. Sólo se pueden utilizar directamente las clases bajojava.lang.*
teniendo que importar de manera explícita el resto. Para invocar un constructor utilizamosclassname([args])
. - Concatenación de Strings con el nuevo operador += (el operador + con Strings intenta, en general, la conversión a un valor numérico, como siempre ha hecho).
- Asignación con el operador = ¡así tal cual! Personalmente no estoy seguro de la conveniencia de este operador.
- Concatenación de expresiones con el operador ; (equivalente a la coma en C).
- Variables propias de EL cuyo uso parece lógico al combinar las nuevas funcionalidades de los operadores de asignación (=) y concatenación de expresiones (;).
Operaciones en colecciones de objetos
Basandose en las nuevas librerias de colecciones que se introducirán en Java 8 los diseñadores de EL 3 han incorporado todo un mecanismo de creación y manipulación de colecciones directamente en EL inspirandose en Java 8 con nombres y funcionalidades lo más parecidas posibles.
Construcción
Siempre se suponen Object, no de ningún tipo concreto inferido)
Operaciones
Las operaciones se basan en la concatenación de operaciones sobre un Stream. Se obtiene un Stream con el método stream()
de Collection o un array. Y luego podemos aplicar operaciones como filter, reduce, map, flatMap… Es recomendable echar un vistazo a la sección 2.3.3 de la especificación para más detalles.
Finalmente os dejo un artículo en el que se ven algunos ejemplos interesantes de las diferentes novedades introducidas en EL 3.0.