Programming in Scala
Scala Nightsession - Agenda

►    Part I - Spracheinführung
     >  Intro
     >  Scala Basics


►    Part II - Scripting
     >  Scripting mit Scala
     >  Livecoding


►    Part III – Application Development
     >  Funktionale Programmierung
     >  Objektorientierung
     >  Livecoding




                 2   Scala
I – Spracheinführung

►    Imperativ
     >  Echte Variablen
     >  Kontrollstrukturen (if, while, try-catch)
     ⇒  Skripting


►    Objektorientiert
     >  Gemeinsame Basistypen für alle „Objekte“
     >  Komposition durch Kombination von Klassen/traits
     ⇒  Modulare Anwendungsentwicklung


►    Funktional
     >  Jeder Ausdruck hat einen Rückgabewert
     >  Zustandslos: Immutable Werte und Collections
     >  Closures, Tupel, Algebraische Datentypen, ….
     ⇒  Datenverarbeitung


             3   Scala
I – Spracheinführung

Was ist Scala?
 Eine Skriptsprache
► 

 Eine Applikationssprache
► 

 Ein Toolkit zum Erstellen von eigenen Sprachen (DSLs)
► 

 Ein aufgeräumtes Java
► 




Was kann man mit Scala?
 Beliebige Problemstellungen ausdrücken und per Typsystem prüfen
► 

 Für jeden Anwendungsfall einen optimalen Kontext schaffen (DSLs)
► 

 Einfache Aufgaben erledigen, Komplexe einfach machen
► 

 Vorhandenen Code zu jeder beliebigen Zeit flexibel und sicher erweitern
► 

 Direkt auf der JVM aufsetzen und beliebige Java-Libraries nutzen
► 

 Mit den Aufgaben und Anforderungen wachsen
► 




           4     Unternehmenspräsentation
I – Spracheinführung: DasTypsystem

You've got the best of both worlds, don't you?
All our strengths, none of our weaknesses.

                           ►    Scalas Typsystem ist stark und statisch
                           ►    Einfaches Refactoring
                           ►    Ermöglicht guten IDE-Support
                           ►    Es sind viel mehr Ausdrücke prüfbar als in Java


                           ►    Der Code wirkt dynamisch
                                >  Typangaben entfallen meist
                                       –  Ausnahme: Schnittstellen
                                       –  Vorteil v.a. bei Typparametern (Generics)
                                >  Statisches Ducktyping
                                >  Implizite Konvertierungen



          5   Scala
I – Spracheinführung

Eine Einführung von Martin Odersky




                             A	
  Scalable	
  Language

                                   Martin Odersky
                                   FOSDEM 2009



                                   Martin Odersky, FOSDEM 2009




       6    Unternehmenspräsentation
II - Scripting

►    Scripting mit Scala




            7     Unternehmenspräsentation
II – Scripting-Einführung (IKEA-Style)

Scripting mit Scala - Have it your way!
 Beim Skripten geht es darum, Aufgaben zu erledigen
► 

  >  Die Sprache soll dich unterstützen und nicht mit Typen und Objekten nerven


 Wenn du eine Library oft in deinen Skripten verwendest…
► 

  >  Gönn ihr ein paar Extra-Methoden und Operatoren!
  >  Impliziten Konvertierungen machen es möglich


 Mach es dir einfach!
► 

  >  Funktionen auf Package-Ebene statt XXXUtils, XYZHelper, …
  >  Closures und Collections sind deine besten Freunde!
  >  Objekte… Klassen? Typen?? => Überbewertet!


Durch den Einsatz als Skriptsprache lässt sich Scala am besten erlernen!

            8     Unternehmenspräsentation
II – Scripting-Basiskomponenten

Scala‘s Collections:




Here be Arrays




►    Vollständiges Neudesign
      >  Ersetzen die JDK-Collections
      >  Einfache Zusammenarbeit mit diesen durch Implizite Konvertierungen
►    Jede Collection gibt es in Mutable und Immutable-Varianten
 Eine Übersicht: http://www.scala-lang.org/docu/files/collections-api/collections.html
► 



               9        Unternehmenspräsentation
II – Scripting-Basiskomponenten
Collections: Sequenzen und Maps

  Seq (~ java.util.List)

  val a = Seq(1,2,4,7)
  println(a(3))                    // gibt 7 aus
  val b = a +: 5                   // Seq(1,2,4,7,5)
  val c = a :+ 10                  // Seq(10,1,2,4,7)
  var d = Array(1,2,9) ++ a        // Array (1,2,9,1,2,4,7)
  d = d.filter { i => i > 3 }      // Array(9,4,7)
  d = d.map { i = > (i + 1).toString }
                                   // Array(„10“,“5“,“8“)
  Map (~ java.util.Map)

  val   m = Map(„a“ -> 4, „b“ -> 5, „d“ -> 6)
  val   ma = m(„a“)            // 4
  val   m2 = m + („f“ -> 6)    // Map(a->4, b->5, d->6, f->6)
  val   m3 = m – “b“           // Map(a->4, d->6, f->6)

              10     Unternehmenspräsentation
II – Scripting-Basiskomponenten
Implizite Konvertierungen
►     Selbstdefinierte automatische Typumwandlungen
►     Scala‘s Panzerklebeband

     Schnittstellen ändern

     implicit def asFileFilter(fn: File => Boolean) = new FileFilter{
       def matches(f: File) = fn(f)
     }
     val files = new File(“foobar.xml“).listFiles { f => f.isFile }

     Neue Methoden hinzufügen

     implicit def xstring(s: String) = new Object{
       def asFile = new File(s)
     }

     val dirs = “foobar.xml“.asFile.listFiles {f => f.isDirectory }



                 11    Unternehmenspräsentation
II – Scripting-Basiskomponenten
Implizite Konvertierungen: Nutzen

  >  Natives Einbinden von fremden Libraries
     –  Kitten z.B. zwischen Scala‘s und Java‘s Collections
     –  Automatisches Ersetzen von Interfaces durch closures (s.o.)
     –  Bestehende Objekte (lokal) um neue Methoden erweitern


  >  Sicherer Ersatz für dynamische Metaklassen
     –  Werden nur angewendet wenn sie im Scope (importiert) sind
     –  Überschreiben keine vorhandenen Methoden und stacken nicht
     –  Können keine globalen Änderungen bewirken


  >  Implicits sind vor allem für das Skripting interessant
     –  Code wird kürzer, besser lesbar
     –  Java-Utilities können einfacher verwendet werden


            12     Unternehmenspräsentation
I – Scripting mit Scala

Live Coding Session


Themen
►    Die Eclipse-IDE
►    Package-Objekte und App
►    Var, Val und Def
►    Implizite Konvertierungen
►    Collections




              13       Unternehmenspräsentation
III - Application Development

►    Application Development




           14    Unternehmenspräsentation
III – Application Development

Scala im „Programming in the Large“
 Je größer ein Projekt ist, je mehr Mitarbeiter es hat und je länger es läuft, umso
► 
wichtiger sind
  >  Statische Typisierung
      –  Einfaches Refactoring und reduzierte Testaufwände
      –  Typangaben dokumentieren den Code
  >  Erweiterbarkeit
      –  Vorhandener Code muss an neue Anforderungen
      –  Leichte Wiederverwendbarkeit
  >  Stabilität
      –  Keine Seiteneffekte
  >  Modularisierung
      –  Aufgaben auf Teams auspalten
      –  Kontrakte definieren
 Jeder dieser Punkte kann auf Spracheebene adressiert werden
► 



            15     Unternehmenspräsentation
III – Application Development

►    Scalas Schlüsselkomponenten dazu


     >  Funktionale Programmierung (FP)
       –  Datenverarbeitung


     >  Objektorientierung (OO)
       –  Modularisierung
       –  Modellierung von Workflows

     >  Das Typsystem
       –  Die 3 Sprachebenen: Statements, Templates, Typen
       –  Typparameter (Generics)




            16    Unternehmenspräsentation
III - Funktionale Programmierung

►    Prinzipien
     >  Trennung von Daten und Funktionen!
     >  Zustandlosigkeit
►    Daten
     >  Typen: Werte, Collections
     >  Sondertypen: Funktionen (Closures), Algebraische Datentypen
     >  Pattern Matching: Zerlegen von Daten in ihre Werte
►    Funktionen
     >  Liefern immer einen Wert zurück
     >  Verändern nicht ihre Eingabeparameter
►    Ziele
     >  Effiziente Datenverarbeitung
     >  Vermeidung von Seiteneffekten!
     >  Dadurch hohe Test- und Wartbarkeit


            17    Unternehmenspräsentation
III – Funktionale Komponenten in Scala

►    Scala integriert die FP als Teil der Objektorientierung
     >  Funktionen: Objekte mit einer unsichtbaren „apply“-Funktion
        { i => i.toString }
        => new Function(){ def apply(i: Any) = i.toString() }


     >  Algebraische Datentypen: Case Klassen
     abstract sealed class Frucht
     case class Apfel(sauer: Boolean) extends Frucht
     Case class Birne(sorte: String) extends Frucht


     >  Pattern Matching
     def welcheFrucht(frucht: Frucht)        =   frucht match {
         case Apfel(sauer) => println(„Ich bin ein Apfel und sauer:“ + sauer)
         case Birne(sorte) => println(„Ich bin eine Birne und heiße:“+ sorte)
     }


            18    Unternehmenspräsentation
III - Objektorientierung in Scala

►    Klassen
     >  Wie in Java, nur kürzer!
     >  Case-Klassen: Quick-and-Dirty Datentypen mit equals/hashcode/toString
►    Objekte
     >  Singletons als Sprachkonstrukt ersetzen die Statics
     >  Unterstützten Vererbung
     >  Package Objekt: Definition von package-weiten Funktionen / Werten
►    Traits
     >  Wie Java-Interfaces, nur mit Implementierungen!
     >  Erlauben eingeschränkte Mehrfachvererbung: (abstrakt, ohne Konstruktor)
►    Strukturelle Typen
     >  Wie Java-Interfaces, nur ohne Vererbung
     >  „Statisch typisiertes“ Ducktyping




            19    Unternehmenspräsentation
III – Objektorientierung: Das Typsystem
Objektorientierung mit einer aufgeräumten Typhierarchie
                                Supertypen
                                ►    Any: Alle Objekte
                                ►    AnyRef: Alle Referenzen
                                     >  java.lang.Object
                                ►    AnyVal: Alle „Primitiven“


                                Subtypen
                                ►    Null: Subtyp aller AnyRefs
                                ►    Nothing: Subtyp aller Typen
                                     >  Ausstieg per Exception


                                Besonderheit
                                ►    Unit: Leerer Wert == void

         20   Scala
III - Erweiterbarkeit durch FP und OO
In welcher Hinsicht ist Scala erweiterbar?
►    Neue Datenstrukturen (Objektorientiert)
     >  Vererbung




►    Neue Operationen (Funktional)
     >  Case Classes mit Pattern Matching




     In jede Richtung mit impliziten Konvertierungen und Parametern..


                 Scala
III – Das Typsystem: Scalas Sprachebenen

Statements
Geben Werte zurück, erzeugen Seiteneffekte
def a = { 3 }
println („Hello World“)

Templates
Definition von Objekten und Klassen
trait Printable { … }
class Printer extends Printable{ … }
object Printer extends Printer{ … }
new { … } with Printable { … }

Typen
Kontrakte aus Klassen, Traits und Methoden
type Jlist[T] = java.util.List[T]
type Closeable = { def close() }
def onClosableList(c : Closeable with Jlist[T])


           22    Unternehmenspräsentation
Livecoding

Themen
►    Objektorientierung
►    Funktionale Programmierung mit Case-Klassen / Pattern Matching
►    Integration mit Java-Klassen




            23     Unternehmenspräsentation
Abschluss




      24    Unternehmenspräsentation
Einsatzszenarien

Scalas Stärken
►    Skripting
►    Buildskripte (SBT, baut auf Maven auf)
►    Applikationsentwicklung
►    Ersatz für XML-Konfigurationsdateien
►    Unit-Testing (ScalaTest, Specs)
►    Web-Entwicklung mit Lift
►    Domain Specific Languages


Javas Stärken
►    GUI-Layouting (GUI-Builder erzeugen immer Java-Code)
►    GWT (Es gibt keinen Bytecode-Compiler für GWT)
►    JPA-Beans (?)

                 Scala
Kritikpunkte

►    Sprache
     >  XML-Support auf Sprachebene
     >  Keine dynamische Typisierung
     >  Komplexität?
        –  Sprache: Weniger komplex als Java, C# und C++…
        –  Fehlermeldungen des Compilers nicht immer hilfreich, v.a. bei impliziten
           Konvertierungen
        –  Flexible Syntax erfordert Konventionen
        –  Viele Sprachfeatures sind für Library-Designer gedacht und werden nur
           selten in der Applikationsentwicklung gebraucht
►    Tooling
     >  Die IDEs (Noch)
     >  Auf die Java-Sprache bezogene Tools nicht einsetzbar (GWT)




               Scala
Ich danke euch für eure Aufmerksamkeit.

     Weitere JVM-Sprachen:
      Groovy (dyn)
     ► 

      Clojure (dyn)
     ► 

      Fantom (stat/dyn)
     ► 

      JRuby (dyn)
     ► 

      Gosu (stat)
     ► 




27                           Unternehmenspräsentation

Nigh Session Scala

  • 1.
  • 2.
    Scala Nightsession -Agenda ►  Part I - Spracheinführung >  Intro >  Scala Basics ►  Part II - Scripting >  Scripting mit Scala >  Livecoding ►  Part III – Application Development >  Funktionale Programmierung >  Objektorientierung >  Livecoding 2 Scala
  • 3.
    I – Spracheinführung ►  Imperativ >  Echte Variablen >  Kontrollstrukturen (if, while, try-catch) ⇒  Skripting ►  Objektorientiert >  Gemeinsame Basistypen für alle „Objekte“ >  Komposition durch Kombination von Klassen/traits ⇒  Modulare Anwendungsentwicklung ►  Funktional >  Jeder Ausdruck hat einen Rückgabewert >  Zustandslos: Immutable Werte und Collections >  Closures, Tupel, Algebraische Datentypen, …. ⇒  Datenverarbeitung 3 Scala
  • 4.
    I – Spracheinführung Wasist Scala? Eine Skriptsprache ►  Eine Applikationssprache ►  Ein Toolkit zum Erstellen von eigenen Sprachen (DSLs) ►  Ein aufgeräumtes Java ►  Was kann man mit Scala? Beliebige Problemstellungen ausdrücken und per Typsystem prüfen ►  Für jeden Anwendungsfall einen optimalen Kontext schaffen (DSLs) ►  Einfache Aufgaben erledigen, Komplexe einfach machen ►  Vorhandenen Code zu jeder beliebigen Zeit flexibel und sicher erweitern ►  Direkt auf der JVM aufsetzen und beliebige Java-Libraries nutzen ►  Mit den Aufgaben und Anforderungen wachsen ►  4 Unternehmenspräsentation
  • 5.
    I – Spracheinführung:DasTypsystem You've got the best of both worlds, don't you? All our strengths, none of our weaknesses. ►  Scalas Typsystem ist stark und statisch ►  Einfaches Refactoring ►  Ermöglicht guten IDE-Support ►  Es sind viel mehr Ausdrücke prüfbar als in Java ►  Der Code wirkt dynamisch >  Typangaben entfallen meist –  Ausnahme: Schnittstellen –  Vorteil v.a. bei Typparametern (Generics) >  Statisches Ducktyping >  Implizite Konvertierungen 5 Scala
  • 6.
    I – Spracheinführung EineEinführung von Martin Odersky A  Scalable  Language Martin Odersky FOSDEM 2009 Martin Odersky, FOSDEM 2009 6 Unternehmenspräsentation
  • 7.
    II - Scripting ►  Scripting mit Scala 7 Unternehmenspräsentation
  • 8.
    II – Scripting-Einführung(IKEA-Style) Scripting mit Scala - Have it your way! Beim Skripten geht es darum, Aufgaben zu erledigen ►  >  Die Sprache soll dich unterstützen und nicht mit Typen und Objekten nerven Wenn du eine Library oft in deinen Skripten verwendest… ►  >  Gönn ihr ein paar Extra-Methoden und Operatoren! >  Impliziten Konvertierungen machen es möglich Mach es dir einfach! ►  >  Funktionen auf Package-Ebene statt XXXUtils, XYZHelper, … >  Closures und Collections sind deine besten Freunde! >  Objekte… Klassen? Typen?? => Überbewertet! Durch den Einsatz als Skriptsprache lässt sich Scala am besten erlernen! 8 Unternehmenspräsentation
  • 9.
    II – Scripting-Basiskomponenten Scala‘sCollections: Here be Arrays ►  Vollständiges Neudesign >  Ersetzen die JDK-Collections >  Einfache Zusammenarbeit mit diesen durch Implizite Konvertierungen ►  Jede Collection gibt es in Mutable und Immutable-Varianten Eine Übersicht: http://www.scala-lang.org/docu/files/collections-api/collections.html ►  9 Unternehmenspräsentation
  • 10.
    II – Scripting-Basiskomponenten Collections:Sequenzen und Maps Seq (~ java.util.List) val a = Seq(1,2,4,7) println(a(3)) // gibt 7 aus val b = a +: 5 // Seq(1,2,4,7,5) val c = a :+ 10 // Seq(10,1,2,4,7) var d = Array(1,2,9) ++ a // Array (1,2,9,1,2,4,7) d = d.filter { i => i > 3 } // Array(9,4,7) d = d.map { i = > (i + 1).toString } // Array(„10“,“5“,“8“) Map (~ java.util.Map) val m = Map(„a“ -> 4, „b“ -> 5, „d“ -> 6) val ma = m(„a“) // 4 val m2 = m + („f“ -> 6) // Map(a->4, b->5, d->6, f->6) val m3 = m – “b“ // Map(a->4, d->6, f->6) 10 Unternehmenspräsentation
  • 11.
    II – Scripting-Basiskomponenten ImpliziteKonvertierungen ►  Selbstdefinierte automatische Typumwandlungen ►  Scala‘s Panzerklebeband Schnittstellen ändern implicit def asFileFilter(fn: File => Boolean) = new FileFilter{ def matches(f: File) = fn(f) } val files = new File(“foobar.xml“).listFiles { f => f.isFile } Neue Methoden hinzufügen implicit def xstring(s: String) = new Object{ def asFile = new File(s) } val dirs = “foobar.xml“.asFile.listFiles {f => f.isDirectory } 11 Unternehmenspräsentation
  • 12.
    II – Scripting-Basiskomponenten ImpliziteKonvertierungen: Nutzen >  Natives Einbinden von fremden Libraries –  Kitten z.B. zwischen Scala‘s und Java‘s Collections –  Automatisches Ersetzen von Interfaces durch closures (s.o.) –  Bestehende Objekte (lokal) um neue Methoden erweitern >  Sicherer Ersatz für dynamische Metaklassen –  Werden nur angewendet wenn sie im Scope (importiert) sind –  Überschreiben keine vorhandenen Methoden und stacken nicht –  Können keine globalen Änderungen bewirken >  Implicits sind vor allem für das Skripting interessant –  Code wird kürzer, besser lesbar –  Java-Utilities können einfacher verwendet werden 12 Unternehmenspräsentation
  • 13.
    I – Scriptingmit Scala Live Coding Session Themen ►  Die Eclipse-IDE ►  Package-Objekte und App ►  Var, Val und Def ►  Implizite Konvertierungen ►  Collections 13 Unternehmenspräsentation
  • 14.
    III - ApplicationDevelopment ►  Application Development 14 Unternehmenspräsentation
  • 15.
    III – ApplicationDevelopment Scala im „Programming in the Large“ Je größer ein Projekt ist, je mehr Mitarbeiter es hat und je länger es läuft, umso ►  wichtiger sind >  Statische Typisierung –  Einfaches Refactoring und reduzierte Testaufwände –  Typangaben dokumentieren den Code >  Erweiterbarkeit –  Vorhandener Code muss an neue Anforderungen –  Leichte Wiederverwendbarkeit >  Stabilität –  Keine Seiteneffekte >  Modularisierung –  Aufgaben auf Teams auspalten –  Kontrakte definieren Jeder dieser Punkte kann auf Spracheebene adressiert werden ►  15 Unternehmenspräsentation
  • 16.
    III – ApplicationDevelopment ►  Scalas Schlüsselkomponenten dazu >  Funktionale Programmierung (FP) –  Datenverarbeitung >  Objektorientierung (OO) –  Modularisierung –  Modellierung von Workflows >  Das Typsystem –  Die 3 Sprachebenen: Statements, Templates, Typen –  Typparameter (Generics) 16 Unternehmenspräsentation
  • 17.
    III - FunktionaleProgrammierung ►  Prinzipien >  Trennung von Daten und Funktionen! >  Zustandlosigkeit ►  Daten >  Typen: Werte, Collections >  Sondertypen: Funktionen (Closures), Algebraische Datentypen >  Pattern Matching: Zerlegen von Daten in ihre Werte ►  Funktionen >  Liefern immer einen Wert zurück >  Verändern nicht ihre Eingabeparameter ►  Ziele >  Effiziente Datenverarbeitung >  Vermeidung von Seiteneffekten! >  Dadurch hohe Test- und Wartbarkeit 17 Unternehmenspräsentation
  • 18.
    III – FunktionaleKomponenten in Scala ►  Scala integriert die FP als Teil der Objektorientierung >  Funktionen: Objekte mit einer unsichtbaren „apply“-Funktion { i => i.toString } => new Function(){ def apply(i: Any) = i.toString() } >  Algebraische Datentypen: Case Klassen abstract sealed class Frucht case class Apfel(sauer: Boolean) extends Frucht Case class Birne(sorte: String) extends Frucht >  Pattern Matching def welcheFrucht(frucht: Frucht) = frucht match { case Apfel(sauer) => println(„Ich bin ein Apfel und sauer:“ + sauer) case Birne(sorte) => println(„Ich bin eine Birne und heiße:“+ sorte) } 18 Unternehmenspräsentation
  • 19.
    III - Objektorientierungin Scala ►  Klassen >  Wie in Java, nur kürzer! >  Case-Klassen: Quick-and-Dirty Datentypen mit equals/hashcode/toString ►  Objekte >  Singletons als Sprachkonstrukt ersetzen die Statics >  Unterstützten Vererbung >  Package Objekt: Definition von package-weiten Funktionen / Werten ►  Traits >  Wie Java-Interfaces, nur mit Implementierungen! >  Erlauben eingeschränkte Mehrfachvererbung: (abstrakt, ohne Konstruktor) ►  Strukturelle Typen >  Wie Java-Interfaces, nur ohne Vererbung >  „Statisch typisiertes“ Ducktyping 19 Unternehmenspräsentation
  • 20.
    III – Objektorientierung:Das Typsystem Objektorientierung mit einer aufgeräumten Typhierarchie Supertypen ►  Any: Alle Objekte ►  AnyRef: Alle Referenzen >  java.lang.Object ►  AnyVal: Alle „Primitiven“ Subtypen ►  Null: Subtyp aller AnyRefs ►  Nothing: Subtyp aller Typen >  Ausstieg per Exception Besonderheit ►  Unit: Leerer Wert == void 20 Scala
  • 21.
    III - Erweiterbarkeitdurch FP und OO In welcher Hinsicht ist Scala erweiterbar? ►  Neue Datenstrukturen (Objektorientiert) >  Vererbung ►  Neue Operationen (Funktional) >  Case Classes mit Pattern Matching In jede Richtung mit impliziten Konvertierungen und Parametern.. Scala
  • 22.
    III – DasTypsystem: Scalas Sprachebenen Statements Geben Werte zurück, erzeugen Seiteneffekte def a = { 3 } println („Hello World“) Templates Definition von Objekten und Klassen trait Printable { … } class Printer extends Printable{ … } object Printer extends Printer{ … } new { … } with Printable { … } Typen Kontrakte aus Klassen, Traits und Methoden type Jlist[T] = java.util.List[T] type Closeable = { def close() } def onClosableList(c : Closeable with Jlist[T]) 22 Unternehmenspräsentation
  • 23.
    Livecoding Themen ►  Objektorientierung ►  Funktionale Programmierung mit Case-Klassen / Pattern Matching ►  Integration mit Java-Klassen 23 Unternehmenspräsentation
  • 24.
    Abschluss 24 Unternehmenspräsentation
  • 25.
    Einsatzszenarien Scalas Stärken ►  Skripting ►  Buildskripte (SBT, baut auf Maven auf) ►  Applikationsentwicklung ►  Ersatz für XML-Konfigurationsdateien ►  Unit-Testing (ScalaTest, Specs) ►  Web-Entwicklung mit Lift ►  Domain Specific Languages Javas Stärken ►  GUI-Layouting (GUI-Builder erzeugen immer Java-Code) ►  GWT (Es gibt keinen Bytecode-Compiler für GWT) ►  JPA-Beans (?) Scala
  • 26.
    Kritikpunkte ►  Sprache >  XML-Support auf Sprachebene >  Keine dynamische Typisierung >  Komplexität? –  Sprache: Weniger komplex als Java, C# und C++… –  Fehlermeldungen des Compilers nicht immer hilfreich, v.a. bei impliziten Konvertierungen –  Flexible Syntax erfordert Konventionen –  Viele Sprachfeatures sind für Library-Designer gedacht und werden nur selten in der Applikationsentwicklung gebraucht ►  Tooling >  Die IDEs (Noch) >  Auf die Java-Sprache bezogene Tools nicht einsetzbar (GWT) Scala
  • 27.
    Ich danke euchfür eure Aufmerksamkeit. Weitere JVM-Sprachen: Groovy (dyn) ►  Clojure (dyn) ►  Fantom (stat/dyn) ►  JRuby (dyn) ►  Gosu (stat) ►  27 Unternehmenspräsentation