Die Merkmale einer neuen Sprache für die JVM

Java versus Ceylon

Attribute:
  • Können einfache Zustände halten
  • Können getter/setter implizieren, ohne sie explizit zu deklarieren
  • Sind polymorph und überschreibbar
  • Können in Verbindung mit Closures verwendet werden
Initialisierung:
  • Fokus liegt auf einem einheitlichen Initialisierungs-Look-And-Feel von Klassenattributen und lokalen Variablen (anders als in Java).
  • Keine Konstruktoren, Initialisierung wird aufgeteilt in:
    • Initialisierungsparameter (werden hinter den Klassennamen geschrieben)
    • Initialisierungscode wird direkt in die Klasse geschrieben

Frage:

Wie führe ich unterschiedliche Initialisierungen durch, z.B. für Testklassen, die in Java über den Good-Citizen-Konstruktor abgebildet werden?

[I am] easy to test- all dependent object I use can be passed to me, often in my constructor (typically as Mock Objects).Dan North, Aslak Hellesoy

Funktionale Ausrichtung:
  • Klassendeklarationen ähneln eher Methodendeklarationen
  • Eine Klasse kann auch als eine Funktion verstanden werden, welche ein Closure mit den eigenen lokalen Variablen liefert.
Type Aliase und Type Inferenzen
  • Für lokale Variablen kann der Typ geschlussfolgert werden
    • value tiere = LinkedList { „Hund“, „Katze“, „Maus“ };
  • Typedefs sind möglich, sollten aber sparsam verwendet werden
    • interface tiere = List<Tier>
High-Order functions
  • Funktionen können andere Funktionen als Parameter entgegen nehmen
    • void fuettern(Essen essen, void fressen())
Vereinfachte Generics
  • Keine Java Wildcards
  • Keine Raw-Types
  • Vergegenständlichte Deklaration
Operanden Polymorphismus
  • Es existiert eine feste Zuordnung von Operanden zu Interfaces
    • == zu Equality
    • < zu Comparable
    • * zu Numeric
  • Alle Klassen, welche Equality implementieren, können mit == verglichen werden
Fazit

Die Typsicherheit bei Nullwerten und die Wertsicherheit bei Subklassen sind auf den ersten Blick sehr interessant. Ob die Generics wesentlich einfacher geworden sind, ist meiner Ansicht nach fraglich, da die „declaration-site variance“ von Ceylon Generics um eine neues Konzept erweitert.

Den Ansatz, shared als einzigen Zugriffsmodifikator zu verwenden, betrachte ich ebenfalls skeptisch. In Java ermöglichen public, protected, default und private das Setzen von feineren Nuancen und damit Designabsichten ausdrucksstark zu untermalen. Deshalb geht die gewonnene Dynamik von shared auf Kosten der ausdrucksstarken Lesbarkeit. Dem Reflection API von Java stellt Ceylon ein typsicheres Meta-Programmiermodell entgegen, welches ich als weiteres Highlight sehe und welches für mich die größte Stärke der Sprache bedeutet. So ist es beispielsweise möglich, Objektinstanziierungen oder Methodenaufrufe zu „intercepten“, ohne Code zu implementieren, welcher nach entsprechenden Interception-Annotationen sucht. Das Metamodell von Ceylon erledigt das „out of the box“ zur Class-Loading-Time.

Frank Hinkel ist Softwareentwickler innerhalb eines Architekturteams der Provinzial Rheinland Versicherung AG und entwickelt unter anderem für das interne Web- und SOA Framework
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.