<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Xtend</id>
	<title>Xtend - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Xtend"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Xtend&amp;action=history"/>
	<updated>2026-06-03T01:00:40Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Xtend&amp;diff=2693174&amp;oldid=prev</id>
		<title>imported&gt;Wurgl: Fix Parametername</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Xtend&amp;diff=2693174&amp;oldid=prev"/>
		<updated>2020-01-11T13:31:03Z</updated>

		<summary type="html">&lt;p&gt;Fix Parametername&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Infobox Programmiersprache&lt;br /&gt;
| Name                   = &amp;lt;!-- Wikidata --&amp;gt;&lt;br /&gt;
| Logo                   = &amp;lt;!-- Wikidata --&amp;gt;&lt;br /&gt;
| Paradigma              = [[Objektorientierung|objektorientiert]], [[Imperative Programmierung|imperativ]], [[Funktionale Programmierung|funktional]]&lt;br /&gt;
| Erscheinungsjahr       = &amp;lt;!-- Wikidata --&amp;gt;&lt;br /&gt;
| Designer               = Sven Efftinge, Sebastian Zarnekow&lt;br /&gt;
| Entwickler             = [http://www.itemis.com/ itemis]&lt;br /&gt;
| AktuelleVersion        = &amp;lt;!-- Wikidata --&amp;gt;&lt;br /&gt;
| AktuelleVersionFreigabeDatum    = &amp;lt;!-- Wikidata --&amp;gt;&lt;br /&gt;
| Typisierung            = [[Starke Typisierung|stark]], [[Statische Typisierung|statisch]]&lt;br /&gt;
| Beeinflusst_von        = [[Java (Programmiersprache)|Java]], [[Scala (Programmiersprache)|Scala]], [[Groovy]], [[Smalltalk (Programmiersprache)|Smalltalk]], [[OpenArchitectureWare#Xpand|Xpand]]&lt;br /&gt;
| Beeinflusste             = &lt;br /&gt;
| Betriebssystem         = [[Plattformunabhängigkeit|plattformunabhängig]]&lt;br /&gt;
| Lizenz                 = &amp;lt;!-- Wikidata --&amp;gt;&lt;br /&gt;
| Website                = &amp;lt;!-- Wikidata --&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Xtend&amp;#039;&amp;#039;&amp;#039; ist eine [[General Purpose Language|Programmiersprache]] für die [[Java Virtual Machine]]. Syntaktisch und semantisch hat Xtend seine Wurzeln in der Programmiersprache [[Java (Programmiersprache)|Java]]. Im Vordergrund stehen allerdings eine kompaktere Syntax und zusätzliche Funktionalität wie [[Typinferenz]], &amp;#039;&amp;#039;Extension-Methoden&amp;#039;&amp;#039; und [[Überladen#Operatorüberladung|Operatorüberladung]]. Xtend ist primär [[Objektorientierung|objektorientiert]], ermöglicht aber auch [[funktionale Programmierung]], z.&amp;amp;nbsp;B. durch [[Lambda-Kalkül|Lambda-Ausdrücke]]. Xtend ist [[Statische Typisierung|statisch getypt]] und benutzt das Typsystem von Java ohne Änderungen. Es wird auf Java-Quellcode kompiliert und integriert sich daher nahtlos mit existierenden Java-Bibliotheken.&lt;br /&gt;
&lt;br /&gt;
Die Sprache Xtend und ihre Entwicklungsumgebung werden im [[Eclipse (IDE)|Eclipse-Projekt]] entwickelt&amp;lt;ref&amp;gt;[http://www.eclipse.org/xtend Official Xtend-Homepage] auf Eclipse.org&amp;lt;/ref&amp;gt; und nehmen am jährlichen Simultanrelease teil. Der Code ist [[Open Source]] unter der [[Eclipse Public License]] erhältlich. Dennoch kann die Sprache unabhängig vom Eclipse-Projekt kompiliert und ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
== Geschichte ==&lt;br /&gt;
Xtend stammt ursprünglich aus dem [[Xtext]]-Projekt, mit dem die Sprache und der Editor entwickelt werden. Xtend wurde daher zunächst als Teil von Xtext im Eclipse-Release &amp;#039;&amp;#039;Indigo&amp;#039;&amp;#039;&amp;lt;ref&amp;gt;[http://wiki.eclipse.org/Indigo Eclipse Indigo release]&amp;lt;/ref&amp;gt; im Juni 2011 veröffentlicht. Seit dem Eclipse-Release &amp;#039;&amp;#039;Juno&amp;#039;&amp;#039;&amp;lt;ref&amp;gt;[http://wiki.eclipse.org/Juno Eclipse Juno release]&amp;lt;/ref&amp;gt; (Juni 2012, Xtend-Version 2.3) ist Xtend ein eigenständiges Projekt. Am 20. März 2013 wurde Xtend in Version 2.4.0 mit erweiterten Features wie &amp;quot;Active [[Annotation (Programmierung)|Annotations]]&amp;quot; releast.&amp;lt;ref&amp;gt;{{Webarchiv|text=Xtend 2.4 Release Notes |url=http://www.eclipse.org/xtend/releasenotes_2_4.html |wayback=20130408173810}}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[http://www.eclipse.org/org/press-release/20130319_xtend2_4.php Xtend 2.4 Release Notes]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die hier beschriebene Sprache Xtend ist nicht zu verwechseln mit der älteren Sprache gleichen Namens aus dem Xpand-Projekt.&amp;lt;ref&amp;gt;[http://wiki.eclipse.org/Xpand Xpand]&amp;lt;/ref&amp;gt; Um Missverständnissen vorzubeugen, wurde Xtend daher zunächst &amp;#039;&amp;#039;Xtend2&amp;#039;&amp;#039; genannt. Die &amp;#039;2&amp;#039; wurde allerdings der Einfachheit halber bald weggelassen. Dank seiner Template-Ausdrücke ersetzt Xtend die Xpand-Technologie komplett.&lt;br /&gt;
&lt;br /&gt;
== Philosophie ==&lt;br /&gt;
[[Java (Programmiersprache)|Java]] ist eine der populärsten Programmiersprachen und es existiert ein umfangreiches Ökosystem von Bibliotheken und Werkzeugen. Dennoch wird die Syntax oft als sperrig empfunden, und neue Eigenschaften werden langsam hinzugefügt. Xtend versucht, das Beste von Java zu erhalten, aber die Syntax zu verbessern und Features zu ergänzen, um besser lesbaren, ausdrucksstärkeren Code zu ermöglichen.&lt;br /&gt;
&lt;br /&gt;
Xtends Syntax ist eng an Java angelegt und kompatibel zu Java, da Xtend-Code zu Java-Quellcode kompiliert wird und Javas Typsystem unverändert verwendet wird. Java-Code und Xtend-Code können daher nebeneinander benutzt werden. Durch eine Kombination von [[Lambda-Kalkül|Lambda-Ausdrücken]] und &amp;#039;&amp;#039;Extension-Methoden&amp;#039;&amp;#039; kann Java mit Bibliotheken erweitert werden, ohne dass die Sprachdefinition angepasst werden muss.&lt;br /&gt;
&lt;br /&gt;
Die Eclipse-basierte Xtend-IDE bietet unter anderem syntaktische Hervorhebung, Code-Vervollständigung, Refactoring, Navigation und Debugging. Sie integriert sich außerdem in Eclipses Java Development Toolkit.&amp;lt;ref&amp;gt;[http://www.eclipse.org/jdt/ JDT]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Semantik ==&lt;br /&gt;
Xtend gleicht [[Java (Programmiersprache)|Java]] in vielerlei Hinsicht, wie das nachstehende Xtend-Beispiel zeigt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Scala&amp;quot;&amp;gt;&lt;br /&gt;
package sample&lt;br /&gt;
&lt;br /&gt;
import java.util.List&lt;br /&gt;
&lt;br /&gt;
class Greeter {&lt;br /&gt;
  def greetThem(List&amp;lt;String&amp;gt; names) {&lt;br /&gt;
    for(name: names) {&lt;br /&gt;
      println(name.sayHello)&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  def sayHello(String name) {&lt;br /&gt;
    &amp;#039;Hello &amp;#039; + name + &amp;#039;!&amp;#039;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Xtend bietet [[Typinferenz]], das heißt, die Typen von &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; und die Rückgabetypen der Methoden können aus dem Kontext inferiert werden. Klassen und Methoden sind standardmäßig &amp;lt;code&amp;gt;public&amp;lt;/code&amp;gt;, Member-Variablen &amp;lt;code&amp;gt;private&amp;lt;/code&amp;gt;. Semikolons sind optional.&lt;br /&gt;
&lt;br /&gt;
In dem Beispiel wird die Methode &amp;lt;code&amp;gt;sayHello&amp;lt;/code&amp;gt; als [[Extension-Methode]] aufgerufen, also wie eine Methode des ersten Arguments &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;. Extension-Methoden können auch von anderen Klassen oder Instanzen beigesteuert werden.&lt;br /&gt;
&lt;br /&gt;
Statt der imperativen for-Schleife, kann man auch im funktionalen Stil einen [[Lambda-Kalkül|Lambda-Ausdruck]] in eckigen Klammern verwenden, und die [[Funktion höherer Ordnung]] &amp;lt;code&amp;gt;forEach&amp;lt;/code&amp;gt; in Extension-Syntax auf der Liste aufrufen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Scala&amp;quot;&amp;gt;&lt;br /&gt;
def greetThem(List&amp;lt;String&amp;gt; names) {&lt;br /&gt;
  names.forEach [ println(sayHello) ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wird der Parameter eines Lambda-Ausdrucks nicht spezifiziert, wird sein Name implizit als  &amp;lt;code&amp;gt;it&amp;lt;/code&amp;gt; angenommen, was wie &amp;lt;code&amp;gt;this&amp;lt;/code&amp;gt; in Java ausgelassen werden kann. Sein Typ wird inferiert. Lambda-Ausdrücke werden außerdem automatisch in Interfaces einer Methode konvertiert, sodass man sie beispielsweise als &amp;lt;code&amp;gt;java.lang.Comparable&amp;lt;/code&amp;gt; benutzen kann.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Template-Ausdrücke&amp;#039;&amp;#039; sind mehrzeilige Strings in dreifachen Apostrophen mit interpolierten Ausdrücken in [[Guillemet|französischen Anführungszeichen]]. Das obige Beispiel sähe mit einem Template-Ausdruck so aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Scala&amp;quot;&amp;gt;&lt;br /&gt;
def sayHello(String name) &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
    Hello «name» !&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Template-Ausdrücke haben eine intelligente Leerzeichenverwaltung –&amp;amp;nbsp;der Text im Beispiel wird nicht eingerückt&amp;amp;nbsp;– und eignen sich daher sehr gut für Code-Generierung.&lt;br /&gt;
&lt;br /&gt;
Weitere bemerkenswerte Sprachfeatures sind [[Dynamische Bindung|Multimethoden]], eine erweiterte Switch-Anweisung und [[Überladen#Operatorüberladung|Operatorenüberladung]] mit Bibliotheksmethoden.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* Sven Efftinge, Sebastian Zarnekow: [http://pragprog.com/magazines/2011-12/extending-java &amp;#039;&amp;#039;Extending Java&amp;#039;&amp;#039;.] In: &amp;#039;&amp;#039;Pragmatic Programmer Magazine&amp;#039;&amp;#039;, Dezember 2011.&lt;br /&gt;
* Alex Blewitt: [http://www.infoq.com/news/2012/06/xtend-release-10 &amp;#039;&amp;#039;Xtend Extends Java&amp;#039;&amp;#039;.] In: &amp;#039;&amp;#039;InfoQ&amp;#039;&amp;#039;, Juni 2012; Interview with Sven Efftinge.&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* Lorenzo Bettini, Implementing Domain-Specific Languages with Xtext and Xtend - Second Edition, Packt Publishing, 2016&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java-Programmierwerkzeug]]&lt;br /&gt;
[[Kategorie:Java (Programmiersprache)]]&lt;br /&gt;
[[Kategorie:Programmiersprache für die Java Virtual Machine]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Wurgl</name></author>
	</entry>
</feed>