# Xtend

Xtend és un llenguatge de programació d'alt nivell de propòsit general per a la màquina virtual Java. Sintàcticament i semànticament, Xtend té les seves arrels en el llenguatge de programació Java, però se centra en una sintaxi més concisa i algunes funcionalitats addicionals com ara inferència de tipus, mètodes d'extensió i sobrecàrrega d'operadors. En ser principalment un llenguatge orientat a objecte, també integra característiques conegudes de la programació funcional, per exemple, expressions lambda. Xtend s'escriu estàticament i utilitza el sistema de tipus de Java sense modificacions. Es compila amb codi Java i, per tant, s'integra perfectament amb totes les biblioteques Java existents.
El llenguatge Xtend i el seu IDE es desenvolupa com a projecte a Eclipse.org i participa en el tren de llançament anual d'Eclipse. El codi és de codi obert sota la llicència pública Eclipse. Tanmateix, el llenguatge es pot compilar i executar independentment de la plataforma Eclipse

## Història

Xtend es va originar a partir de Xtext, que és la tecnologia utilitzada per definir l'idioma i l'editor. Xtend es va llançar per primera vegada com a part d' Xtext al llançament d'Eclipse Indigo el juny de 2011. Des del llançament d'Eclipse Juno (juny de 2012, versió 2.3 de Xtend), Xtend s'ha convertit en un projecte autònom.
El llenguatge Xtend descrit aquí no s'ha de confondre amb el llenguatge anterior amb el mateix nom al projecte Xpand. Inicialment, Xtend es va anomenar Xtend2 per a una millor distinció. El "2" es va deixar aviat per simplicitat. Amb les seves expressions de plantilla, Xtend està pensat com un reemplaçament de tota la tecnologia Xpand.

## Filosofia

Java és un dels llenguatges de programació més populars mai amb un gran ecosistema de biblioteques i eines. No obstant això, la seva sintaxi es considera verbosa per alguns, i alguns conceptes falten i només s'afegeixen lentament. Xtend intenta treure el millor de Java, però redueix el soroll sintàctic i afegeix noves funcions per permetre un codi més curt i millor llegible.
Per facilitar l'aprenentatge dels desenvolupadors de Java, la sintaxi d'Xtend és propera a la de Java. Xtend manté la màxima compatibilitat amb Java compilant el codi Java i utilitzant el sistema de tipus Java. El codi Java i el codi Xtend es poden barrejar dins del mateix projecte a voluntat.
Mitjançant una combinació d'expressions lambda i mètodes d'extensió, el llenguatge es pot estendre mitjançant biblioteques, és a dir, sense canviar el llenguatge en si. Una petita biblioteca estàndard en fa un gran ús.
L'IDE Xtend basat en Eclipse ofereix ressaltat de sintaxi, finalització de codi, refactorització, navegació i depuració. S'integra amb el conjunt d'eines de desenvolupament de Java d'Eclipse.

## Semàntica

Xtend s'assembla a Java en molts aspectes. Aquí teniu un exemple de fitxer Xtend:
Xtend proporciona inferència de tipus, és a dir, el tipus de name i els tipus de retorn dels mètodes es poden inferir del context. Les classes i els mètodes són public per defecte, els camps private. Els punts i coma són opcionals.
L'exemple també mostra el mètode sayHello anomenat com a mètode d'extensió, és a dir, com una característica del seu primer argument. Els mètodes d'extensió també els poden proporcionar altres classes o instàncies.
En lloc d'utilitzar l'imperatiu for-loop, es podria utilitzar una expressió lambda d' estil funcional entre claudàtors i cridar a la funció d'ordre superior forEach en la sintaxi d'extensió de la llista:
Recordeu que el paràmetre de la lambda, si no s'especifica, es diu it, que pot ser saltada com this en Java. El seu tipus es dedueix com a cadena. Les expressions lambda també es coaccionen automàticament a interfícies d'un sol mètode, de manera que es poden passar, per exemple, com a java.lang. Comparable.
Les expressions de plantilla són cadenes de diverses línies dins de cometes triples amb valors interpolats en cometes en francès. En l'exemple anterior es podria escriure
Xtend ofereix una gestió intel·ligent d'espais en blanc (el text anterior no es sagnarà a la sortida), complint així els requisits de generació de codi.
Altres característiques del llenguatge inclouen multimètodes, una potent expressió de commutació i sobrecàrrega d'operadors mitjançant mètodes de biblioteca.

## Referències

* ↑ Sven Efftinge. «Official Xtend Homepage at». Eclipse.org. [Consulta: 14 setembre 2013].
* ↑ «Eclipse Indigo release». Wiki.eclipse.org, 30-03-2011. [Consulta: 14 setembre 2013].
* ↑ «Eclipse Juno release». Wiki.eclipse.org, 17-03-2012. [Consulta: 14 setembre 2013].
* ↑ «Xpand». Wiki.eclipse.org, 04-06-2013. [Consulta: 14 setembre 2013].
* ↑ «JDT». Eclipse.org. [Consulta: 14 setembre 2013].

## Bibliografia

* Bettini, Lorenzo. Implementing Domain-Specific Languages with Xtext and Xtend (en anglès). Packt Publishing, 2016.

## Enllaços externs

* Sven Efftinge, Sebastian Zarnekow, Extending Java Arxivat 2018-08-03 a Wayback Machine., Pragmatic Programmer Magazine, desembre de 2011.
* Alex Blewitt: Xtend Extends Java, Entrevista amb Sven Efftinge, InfoQ, juny de 2012.