# Xtend

Xtend es un lenguaje de programación de alto nivel de propósito general para la Máquina Virtual de Java . Xtend tiene sus raíces en el lenguaje de programación Java , tanto en la forma sintáctica como semántica, pero tiene una sintaxis más concisa y algunas funciones adicionales, como la inferencia de tipos , los métodos de extensión y la sobrecarga de operadores . Al ser principalmente un lenguaje orientado a objetos, también integra características de la programación funcional , por ejemplo, puede utilizar expresiones lambda . Xtend tiene un sistema de tipos estático y utiliza el sistema de tipos de Java sin modificaciones. Se compila a código Java y, por lo tanto, puede integrarse completamente con todas las bibliotecas de Java existentes.
El lenguaje Xtend y su IDE se desarrollan como un proyecto en Eclipse.org y participan en el conjunto de lanzamientos anuales de Eclipse. Su implementación es de código abierto bajo la Licencia Pública de Eclipse . Sin embargo, el lenguaje se puede compilar y ejecutar independientemente de la plataforma Eclipse .
Xtend se originó a partir de Xtext , que es la tecnología utilizada para definir el lenguaje y el editor. Xtend se lanzó por primera vez como parte de Xtext en el lanzamiento de Eclipse Indigo en junio de 2011. Desde el lanzamiento de Eclipse, Juno (junio de 2012, Xtend versión 2.3) Xtend se ha convertido en un proyecto independiente.
El lenguaje Xtend descrito aquí no debe confundirse con el idioma antiguo con el mismo nombre en el proyecto Xpand. Inicialmente, Xtend fue nombrado Xtend2 para diferenciarse mejor. El '2' se descartó pronto por simplicidad. Con sus expresiones de plantilla, Xtend está destinado a reemplazar toda la tecnología Xpand.

## Filosofía

Java es uno de los lenguajes de programación más populares de la historia con un gran ecosistema de bibliotecas y herramientas. Sin embargo, algunos consideran que su sintaxis es demasiado detallada, y que faltan algunos conceptos agregándose lentamente. Xtend intenta obtener lo mejor de Java , pero reduce la complejidad sintáctica y agrega nuevas funciones para permitir un código más corto y legible.
Para facilitar el aprendizaje de los desarrolladores de Java , la sintaxis de Xtend es muy similar a la de Java . Xtend mantiene la máxima compatibilidad con Java compilando el código a Java y utilizando el sistema de tipos de Java . El código Java y el código Xtend se pueden mezclar dentro del mismo proyecto a voluntad.
Usando una combinación de expresiones lambda y métodos de extensión , el lenguaje se puede extender mediante bibliotecas, es decir, sin cambiar el lenguaje en sí. Una pequeña biblioteca estándar hace un uso intensivo de esto.
El IDE de Xtend basado en Eclipse ofrece resaltado de sintaxis, compleción automática de código, refactorización, navegación y depuración. Se integra con el kit de herramientas de desarrollo de Java de Eclipse, JDT.

## Semántica

Xtend se parece a Java en muchos aspectos. Aquí hay un ejemplo de archivo Xtend:
Xtend proporciona inferencia de tipo , es decir, el tipo de name y los tipos de retorno de los métodos se pueden inferir a partir del contexto. Las clases y los métodos son public por defecto, los campos son private . Los puntos y coma son opcionales.
El ejemplo también muestra el método que decirHola llamado como un método de extensión , es decir, como una característica de su primer argumento. Los métodos de extensión también pueden ser proporcionados por otras clases o instancias.
En lugar de usar el imperativo for-loop, se podría usar una expresión lambda de estilo funcional entre corchetes y llamar a la función de orden superior forEach en la sintaxis de extensión en la lista:
En este caso, el parámetro de lambda, si no se especifica, se llama it , que puede verse como this en Java. Su tipo se infiere como cadena. Las expresiones Lambda también se aplican automáticamente a las interfaces de un solo método, de modo que se pueden pasar, por ejemplo, como java.lang. Comparable Las expresiones de plantilla son cadenas de varias líneas dentro de comillas triples con valores interpolados en comillas francesas . El ejemplo anterior se podría escribir como
Xtend ofrece una gestión inteligente de espacios en blanco (el texto anterior no se sangrará en la salida), por lo que cumple con los requisitos de la generación de código.
Otras características del lenguaje incluyen métodos múltiples , una poderosa expresión de opciones switch y sobrecarga de operadores mediante métodos en biblioteca.