2. What is Ceylon?
• „Allgemeine“ (general-purpose) Sprache
• Syntax ähnlich zu Java / C#
• Wesentliche Eigenschaften:
– Imperativ
– Statisch getypt (Compile-time type checking)
– Strukturiert in Blöcken
– Objekt-Orientiert
3. Runtime und Plattform
• Ceylon Module ausführbar auf:
– Java Virtual Machine
– JavaScript Virtual Machine
• Ceylon kann Java/JavaScript Code aufrufen (und umgekehrt)
• Ceylon SDK als Klassenbibliothek
– Einige SDK-Module basieren auf dem Java SDK, d.h.
keine Verwendung in JavaScript
4. Releases
• Version 1.0.0
– 13. November 2013
• Version 1.1.0
– 09. Oktober 2014
• Nächstes Release 1.2.0
– Fokus auf neue Features und Java EE-Integration
5. Klassen
• Klassendefinition:
– Kein expliziter Konstruktor
– Argumente der Klasse werden automatisch zu
Attributen
– Instanziierung ohne new
– Fat arrow als Kurzform, = als Konstante
6. Access Modifier
• Kein public/private
• Durch „shared“ wird ein Element sichbar für die
nächst höhere Ebene:
Modul
Paket
Klasse / Top-Level Funktion
Attribut / Methode
12. Union types
• Wert kann einem Union type X|Y zugewiesen werden,
wenn er entweder X oder Y ist:
13. Intersection types
• Wert kann einem Intersection type X&Y zugewiesen
werden, wenn er X und Y zugewiesen werden
kann:
14. Typ-System: Datentypen
• Keine „primitiven“ Datentypen
– Aus Performance-Gründen: Compiler verwendet Javas
primitive Typen
– Trotzdem numerische Operatoren verwendbar:
15. Typ-System: „mixin“ Vererbung
• Interfaces können Attribute und konkrete
Methoden definieren:
Attribut darf keinen konkreten
Wert haben
16. Typ-System: „mixin“ Vererbung
• Klasse darf zwei
Attribute/Methoden mit
gleichem Namen erben
– Doppeldeutigkeiten
müssen in
gemeinsamem
Vorfahren ausgeräumt
werden
18. Covariance and Contravariance
• Ein Geek ist auch eine Person, aber…
• Collection produziert und konsumiert Geeks und keine
Personen -> zwei Interfaces notwendig:
19. Covariance and Contravariance
• Nun kann Collection als „mixin“ von Producer und Consumer
definiert werden:
• Und Personen können zu Geeks hinzugefügt werden:
• Damit produziert geeks auch Personen:
20. Typ-System: Anonyme Klassen
• Benannte Instanz einer Klasse ohne der Klasse selbst
einen Namen zu geben
• Kann Werte einfassen (Closure):
21. Benannte Argumente
• Namen der Argumente können genutzt werden:
• Dies erlaubt deklarative
Instanziierung: