SlideShare ist ein Scribd-Unternehmen logo
1 von 27
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

".NET und jetzt!" C# in 21 Tagen oder doch besser Best Practices
".NET und jetzt!" C# in 21 Tagen oder doch besser Best Practices".NET und jetzt!" C# in 21 Tagen oder doch besser Best Practices
".NET und jetzt!" C# in 21 Tagen oder doch besser Best PracticesGFU Cyrus AG
 
Funktionales Programmieren mit Clojure
Funktionales Programmieren mit ClojureFunktionales Programmieren mit Clojure
Funktionales Programmieren mit ClojureDr. Christian Betz
 
Was geht mit Java 17?
Was geht mit Java 17?Was geht mit Java 17?
Was geht mit Java 17?gedoplan
 
Office-Programmierung mit VBA
Office-Programmierung mit VBAOffice-Programmierung mit VBA
Office-Programmierung mit VBAmspgermany
 
Einführung in die funktionale Programmierung
Einführung in die funktionale ProgrammierungEinführung in die funktionale Programmierung
Einführung in die funktionale ProgrammierungDigicomp Academy AG
 
Was ist neu in Java 6, 7, 8, ...
Was ist neu in Java 6, 7, 8, ...Was ist neu in Java 6, 7, 8, ...
Was ist neu in Java 6, 7, 8, ...Andreas Schreiber
 

Was ist angesagt? (12)

Scala Workshop
Scala WorkshopScala Workshop
Scala Workshop
 
Bit WiSe 2013 | Basisinformationstechnologie I - 08: Programmiersprachen I
Bit WiSe 2013 | Basisinformationstechnologie I - 08: Programmiersprachen IBit WiSe 2013 | Basisinformationstechnologie I - 08: Programmiersprachen I
Bit WiSe 2013 | Basisinformationstechnologie I - 08: Programmiersprachen I
 
".NET und jetzt!" C# in 21 Tagen oder doch besser Best Practices
".NET und jetzt!" C# in 21 Tagen oder doch besser Best Practices".NET und jetzt!" C# in 21 Tagen oder doch besser Best Practices
".NET und jetzt!" C# in 21 Tagen oder doch besser Best Practices
 
BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I
BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen IBIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I
BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I
 
Haxe & NME
Haxe & NMEHaxe & NME
Haxe & NME
 
Funktionales Programmieren mit Clojure
Funktionales Programmieren mit ClojureFunktionales Programmieren mit Clojure
Funktionales Programmieren mit Clojure
 
Was geht mit Java 17?
Was geht mit Java 17?Was geht mit Java 17?
Was geht mit Java 17?
 
Office-Programmierung mit VBA
Office-Programmierung mit VBAOffice-Programmierung mit VBA
Office-Programmierung mit VBA
 
Real lifefp
Real lifefpReal lifefp
Real lifefp
 
Einführung in die funktionale Programmierung
Einführung in die funktionale ProgrammierungEinführung in die funktionale Programmierung
Einführung in die funktionale Programmierung
 
Was ist neu in Java 6, 7, 8, ...
Was ist neu in Java 6, 7, 8, ...Was ist neu in Java 6, 7, 8, ...
Was ist neu in Java 6, 7, 8, ...
 
P6oo
P6ooP6oo
P6oo
 

Andere mochten auch

Social Media - Wo Deine Leser schon auf Dich warten
Social Media - Wo Deine Leser schon auf Dich wartenSocial Media - Wo Deine Leser schon auf Dich warten
Social Media - Wo Deine Leser schon auf Dich wartenKnowtheirname ApS
 
QS von IT-Consulting bis Software Development
QS von IT-Consulting bis Software DevelopmentQS von IT-Consulting bis Software Development
QS von IT-Consulting bis Software Developmentadesso AG
 
Wasser und Lebensmittel-Sicherheit, Die Herausforderung die Welt zu ernähren
Wasser und Lebensmittel-Sicherheit, Die Herausforderung die Welt zu ernährenWasser und Lebensmittel-Sicherheit, Die Herausforderung die Welt zu ernähren
Wasser und Lebensmittel-Sicherheit, Die Herausforderung die Welt zu ernährenPlanet Horizons Technologies SA
 
Gottes bedingungslose liebe - God's Unconditional Love
Gottes bedingungslose liebe - God's Unconditional LoveGottes bedingungslose liebe - God's Unconditional Love
Gottes bedingungslose liebe - God's Unconditional LoveFreekidstories
 
#SOMEXcircle "Personal Branding - What do you want to be famous for" - German...
#SOMEXcircle "Personal Branding - What do you want to be famous for" - German...#SOMEXcircle "Personal Branding - What do you want to be famous for" - German...
#SOMEXcircle "Personal Branding - What do you want to be famous for" - German...SOMEXCLOUD
 
Justin and selena document
Justin and selena documentJustin and selena document
Justin and selena documentmrs_bieber13
 
Radiojournalismus. Ein Blockseminar. - Seminar 3/4: Moderation und Interview
Radiojournalismus. Ein Blockseminar. - Seminar 3/4: Moderation und InterviewRadiojournalismus. Ein Blockseminar. - Seminar 3/4: Moderation und Interview
Radiojournalismus. Ein Blockseminar. - Seminar 3/4: Moderation und InterviewRobert Piehler
 
FMK 2013 Mbs filemaker plugin, Christian Schmitz
FMK 2013 Mbs filemaker plugin, Christian SchmitzFMK 2013 Mbs filemaker plugin, Christian Schmitz
FMK 2013 Mbs filemaker plugin, Christian SchmitzVerein FM Konferenz
 
Was kann ich ihm geben? - What Can I Give Him?
Was kann ich ihm geben? - What Can I Give Him?Was kann ich ihm geben? - What Can I Give Him?
Was kann ich ihm geben? - What Can I Give Him?Freekidstories
 
Trainings für Instandhaltung und Produktion - Termine 2014
Trainings für Instandhaltung und Produktion - Termine 2014Trainings für Instandhaltung und Produktion - Termine 2014
Trainings für Instandhaltung und Produktion - Termine 2014dankl+partner consulting gmbh
 
Social-Media-Frust: Die größten Probleme der Pressestellen im Social Web
Social-Media-Frust: Die größten Probleme der Pressestellen im Social WebSocial-Media-Frust: Die größten Probleme der Pressestellen im Social Web
Social-Media-Frust: Die größten Probleme der Pressestellen im Social WebFaktenkontor
 

Andere mochten auch (20)

Social Media - Wo Deine Leser schon auf Dich warten
Social Media - Wo Deine Leser schon auf Dich wartenSocial Media - Wo Deine Leser schon auf Dich warten
Social Media - Wo Deine Leser schon auf Dich warten
 
QS von IT-Consulting bis Software Development
QS von IT-Consulting bis Software DevelopmentQS von IT-Consulting bis Software Development
QS von IT-Consulting bis Software Development
 
Wasser und Lebensmittel-Sicherheit, Die Herausforderung die Welt zu ernähren
Wasser und Lebensmittel-Sicherheit, Die Herausforderung die Welt zu ernährenWasser und Lebensmittel-Sicherheit, Die Herausforderung die Welt zu ernähren
Wasser und Lebensmittel-Sicherheit, Die Herausforderung die Welt zu ernähren
 
Gottes bedingungslose liebe - God's Unconditional Love
Gottes bedingungslose liebe - God's Unconditional LoveGottes bedingungslose liebe - God's Unconditional Love
Gottes bedingungslose liebe - God's Unconditional Love
 
#SOMEXcircle "Personal Branding - What do you want to be famous for" - German...
#SOMEXcircle "Personal Branding - What do you want to be famous for" - German...#SOMEXcircle "Personal Branding - What do you want to be famous for" - German...
#SOMEXcircle "Personal Branding - What do you want to be famous for" - German...
 
Schiele
SchieleSchiele
Schiele
 
Bachblueten
BachbluetenBachblueten
Bachblueten
 
Justin and selena document
Justin and selena documentJustin and selena document
Justin and selena document
 
Radiojournalismus. Ein Blockseminar. - Seminar 3/4: Moderation und Interview
Radiojournalismus. Ein Blockseminar. - Seminar 3/4: Moderation und InterviewRadiojournalismus. Ein Blockseminar. - Seminar 3/4: Moderation und Interview
Radiojournalismus. Ein Blockseminar. - Seminar 3/4: Moderation und Interview
 
Miss
MissMiss
Miss
 
FMK 2013 Mbs filemaker plugin, Christian Schmitz
FMK 2013 Mbs filemaker plugin, Christian SchmitzFMK 2013 Mbs filemaker plugin, Christian Schmitz
FMK 2013 Mbs filemaker plugin, Christian Schmitz
 
Was kann ich ihm geben? - What Can I Give Him?
Was kann ich ihm geben? - What Can I Give Him?Was kann ich ihm geben? - What Can I Give Him?
Was kann ich ihm geben? - What Can I Give Him?
 
IFC Ebert Tagung Instandhaltung 2014
IFC Ebert Tagung Instandhaltung 2014IFC Ebert Tagung Instandhaltung 2014
IFC Ebert Tagung Instandhaltung 2014
 
Vereinbarung
VereinbarungVereinbarung
Vereinbarung
 
Trainings für Instandhaltung und Produktion - Termine 2014
Trainings für Instandhaltung und Produktion - Termine 2014Trainings für Instandhaltung und Produktion - Termine 2014
Trainings für Instandhaltung und Produktion - Termine 2014
 
Irm basics
Irm   basicsIrm   basics
Irm basics
 
Social-Media-Frust: Die größten Probleme der Pressestellen im Social Web
Social-Media-Frust: Die größten Probleme der Pressestellen im Social WebSocial-Media-Frust: Die größten Probleme der Pressestellen im Social Web
Social-Media-Frust: Die größten Probleme der Pressestellen im Social Web
 
Psalmen 91 - Psalm 91
Psalmen 91 - Psalm 91Psalmen 91 - Psalm 91
Psalmen 91 - Psalm 91
 
Bookmarks
BookmarksBookmarks
Bookmarks
 
Oberfläche Kugel
Oberfläche KugelOberfläche Kugel
Oberfläche Kugel
 

Ähnlich wie Nigh Session Scala

Scala 4 Enterprise
Scala 4 EnterpriseScala 4 Enterprise
Scala 4 Enterpriseadesso AG
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsQAware GmbH
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsJosef Adersberger
 
The Lotus Code Cookbook
The Lotus Code CookbookThe Lotus Code Cookbook
The Lotus Code CookbookUlrich Krause
 
LINQ - Einheitlicher Datenzugriff in .NET
LINQ - Einheitlicher Datenzugriff in .NETLINQ - Einheitlicher Datenzugriff in .NET
LINQ - Einheitlicher Datenzugriff in .NETGFU Cyrus AG
 
Java und Go im Vergleich
Java und Go im VergleichJava und Go im Vergleich
Java und Go im VergleichQAware GmbH
 
Besseren Java Code mit Type Annotations
Besseren Java Code mit Type AnnotationsBesseren Java Code mit Type Annotations
Besseren Java Code mit Type Annotationsdzuvic
 
Ruby und Rails für .NET Entwickler
Ruby und Rails für .NET EntwicklerRuby und Rails für .NET Entwickler
Ruby und Rails für .NET EntwicklerNETUserGroupBern
 
Creasoft - Windows powershell
Creasoft - Windows powershellCreasoft - Windows powershell
Creasoft - Windows powershellCreasoft AG
 
OOP 2014 SQL oder NoSQL - die Auswahl der richtigen Datenbankplattform für di...
OOP 2014 SQL oder NoSQL - die Auswahl der richtigen Datenbankplattform für di...OOP 2014 SQL oder NoSQL - die Auswahl der richtigen Datenbankplattform für di...
OOP 2014 SQL oder NoSQL - die Auswahl der richtigen Datenbankplattform für di...AWS Germany
 
Feige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-UmfeldFeige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-Umfeldgedoplan
 
An Introduction to Ruby
An Introduction to RubyAn Introduction to Ruby
An Introduction to RubyJonathan Weiss
 
Einführung in die funktionale Programmierung mit Clojure
Einführung in die funktionale Programmierung mit ClojureEinführung in die funktionale Programmierung mit Clojure
Einführung in die funktionale Programmierung mit ClojureSascha Koch
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...gedoplan
 
JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013Oliver Zeigermann
 
Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17remigius-stalder
 

Ähnlich wie Nigh Session Scala (20)

Scala 4 Enterprise
Scala 4 EnterpriseScala 4 Enterprise
Scala 4 Enterprise
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
The Lotus Code Cookbook
The Lotus Code CookbookThe Lotus Code Cookbook
The Lotus Code Cookbook
 
LINQ - Einheitlicher Datenzugriff in .NET
LINQ - Einheitlicher Datenzugriff in .NETLINQ - Einheitlicher Datenzugriff in .NET
LINQ - Einheitlicher Datenzugriff in .NET
 
Windows Powershell
Windows PowershellWindows Powershell
Windows Powershell
 
Workshop: Besseres C#
Workshop: Besseres C#Workshop: Besseres C#
Workshop: Besseres C#
 
Java und Go im Vergleich
Java und Go im VergleichJava und Go im Vergleich
Java und Go im Vergleich
 
Besseren Java Code mit Type Annotations
Besseren Java Code mit Type AnnotationsBesseren Java Code mit Type Annotations
Besseren Java Code mit Type Annotations
 
Ruby und Rails für .NET Entwickler
Ruby und Rails für .NET EntwicklerRuby und Rails für .NET Entwickler
Ruby und Rails für .NET Entwickler
 
Creasoft - Windows powershell
Creasoft - Windows powershellCreasoft - Windows powershell
Creasoft - Windows powershell
 
OOP 2014 SQL oder NoSQL - die Auswahl der richtigen Datenbankplattform für di...
OOP 2014 SQL oder NoSQL - die Auswahl der richtigen Datenbankplattform für di...OOP 2014 SQL oder NoSQL - die Auswahl der richtigen Datenbankplattform für di...
OOP 2014 SQL oder NoSQL - die Auswahl der richtigen Datenbankplattform für di...
 
Enterprise JS
Enterprise JS Enterprise JS
Enterprise JS
 
Feige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-UmfeldFeige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-Umfeld
 
An Introduction to Ruby
An Introduction to RubyAn Introduction to Ruby
An Introduction to Ruby
 
Einführung in die funktionale Programmierung mit Clojure
Einführung in die funktionale Programmierung mit ClojureEinführung in die funktionale Programmierung mit Clojure
Einführung in die funktionale Programmierung mit Clojure
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
 
JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013
 
Scala
ScalaScala
Scala
 
Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17Infrastructure as Code - BaselOne 17
Infrastructure as Code - BaselOne 17
 

Mehr von adesso AG

SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP (Kurzversion)
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP (Kurzversion)SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP (Kurzversion)
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP (Kurzversion)adesso AG
 
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMPSNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMPadesso AG
 
Mythos High Performance Teams
Mythos High Performance TeamsMythos High Performance Teams
Mythos High Performance Teamsadesso AG
 
A Business-Critical SharePoint Solution From adesso AG
A Business-CriticalSharePoint SolutionFrom adesso AGA Business-CriticalSharePoint SolutionFrom adesso AG
A Business-Critical SharePoint Solution From adesso AGadesso AG
 
Was Sie über NoSQL Datenbanken wissen sollten!
Was Sie über NoSQL Datenbanken wissen sollten!Was Sie über NoSQL Datenbanken wissen sollten!
Was Sie über NoSQL Datenbanken wissen sollten!adesso AG
 
Continuous Delivery praktisch
Continuous Delivery praktischContinuous Delivery praktisch
Continuous Delivery praktischadesso AG
 
Agilität, Snapshots und Continuous Delivery
Agilität, Snapshots und Continuous DeliveryAgilität, Snapshots und Continuous Delivery
Agilität, Snapshots und Continuous Deliveryadesso AG
 
Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?
Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?
Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?adesso AG
 
Getriebene Anwendungslandschaften
Getriebene AnwendungslandschaftenGetriebene Anwendungslandschaften
Getriebene Anwendungslandschaftenadesso AG
 
Google App Engine JAX PaaS Parade 2013
Google App Engine JAX PaaS Parade 2013Google App Engine JAX PaaS Parade 2013
Google App Engine JAX PaaS Parade 2013adesso AG
 
Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)
Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)
Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)adesso AG
 
OOP 2013 NoSQL Suche
OOP 2013 NoSQL SucheOOP 2013 NoSQL Suche
OOP 2013 NoSQL Sucheadesso AG
 
NoSQL in der Cloud - Why?
NoSQL in der Cloud -  Why?NoSQL in der Cloud -  Why?
NoSQL in der Cloud - Why?adesso AG
 
Lean web architecture mit jsf 2.0, cdi & co.
Lean web architecture mit jsf 2.0, cdi & co.Lean web architecture mit jsf 2.0, cdi & co.
Lean web architecture mit jsf 2.0, cdi & co.adesso AG
 
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDI
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDISchlanke Webarchitekturen nicht nur mit JSF 2 und CDI
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDIadesso AG
 
Zehn Hinweise für Architekten
Zehn Hinweise für ArchitektenZehn Hinweise für Architekten
Zehn Hinweise für Architektenadesso AG
 
Agile Praktiken
Agile PraktikenAgile Praktiken
Agile Praktikenadesso AG
 
Java und Cloud - nicht nur mit PaaS
Java und Cloud - nicht nur mit PaaS Java und Cloud - nicht nur mit PaaS
Java und Cloud - nicht nur mit PaaS adesso AG
 
Neue EBusiness Perspektiven durch HTML5
Neue EBusiness Perspektiven durch HTML5Neue EBusiness Perspektiven durch HTML5
Neue EBusiness Perspektiven durch HTML5adesso AG
 
CloudConf2011 Introduction to Google App Engine
CloudConf2011 Introduction to Google App EngineCloudConf2011 Introduction to Google App Engine
CloudConf2011 Introduction to Google App Engineadesso AG
 

Mehr von adesso AG (20)

SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP (Kurzversion)
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP (Kurzversion)SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP (Kurzversion)
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP (Kurzversion)
 
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMPSNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP
 
Mythos High Performance Teams
Mythos High Performance TeamsMythos High Performance Teams
Mythos High Performance Teams
 
A Business-Critical SharePoint Solution From adesso AG
A Business-CriticalSharePoint SolutionFrom adesso AGA Business-CriticalSharePoint SolutionFrom adesso AG
A Business-Critical SharePoint Solution From adesso AG
 
Was Sie über NoSQL Datenbanken wissen sollten!
Was Sie über NoSQL Datenbanken wissen sollten!Was Sie über NoSQL Datenbanken wissen sollten!
Was Sie über NoSQL Datenbanken wissen sollten!
 
Continuous Delivery praktisch
Continuous Delivery praktischContinuous Delivery praktisch
Continuous Delivery praktisch
 
Agilität, Snapshots und Continuous Delivery
Agilität, Snapshots und Continuous DeliveryAgilität, Snapshots und Continuous Delivery
Agilität, Snapshots und Continuous Delivery
 
Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?
Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?
Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?
 
Getriebene Anwendungslandschaften
Getriebene AnwendungslandschaftenGetriebene Anwendungslandschaften
Getriebene Anwendungslandschaften
 
Google App Engine JAX PaaS Parade 2013
Google App Engine JAX PaaS Parade 2013Google App Engine JAX PaaS Parade 2013
Google App Engine JAX PaaS Parade 2013
 
Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)
Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)
Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)
 
OOP 2013 NoSQL Suche
OOP 2013 NoSQL SucheOOP 2013 NoSQL Suche
OOP 2013 NoSQL Suche
 
NoSQL in der Cloud - Why?
NoSQL in der Cloud -  Why?NoSQL in der Cloud -  Why?
NoSQL in der Cloud - Why?
 
Lean web architecture mit jsf 2.0, cdi & co.
Lean web architecture mit jsf 2.0, cdi & co.Lean web architecture mit jsf 2.0, cdi & co.
Lean web architecture mit jsf 2.0, cdi & co.
 
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDI
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDISchlanke Webarchitekturen nicht nur mit JSF 2 und CDI
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDI
 
Zehn Hinweise für Architekten
Zehn Hinweise für ArchitektenZehn Hinweise für Architekten
Zehn Hinweise für Architekten
 
Agile Praktiken
Agile PraktikenAgile Praktiken
Agile Praktiken
 
Java und Cloud - nicht nur mit PaaS
Java und Cloud - nicht nur mit PaaS Java und Cloud - nicht nur mit PaaS
Java und Cloud - nicht nur mit PaaS
 
Neue EBusiness Perspektiven durch HTML5
Neue EBusiness Perspektiven durch HTML5Neue EBusiness Perspektiven durch HTML5
Neue EBusiness Perspektiven durch HTML5
 
CloudConf2011 Introduction to Google App Engine
CloudConf2011 Introduction to Google App EngineCloudConf2011 Introduction to Google App Engine
CloudConf2011 Introduction to Google App Engine
 

Nigh Session Scala

  • 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 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
  • 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 Eine Einfü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‘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
  • 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 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
  • 12. 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
  • 13. 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
  • 14. III - Application Development ►  Application Development 14 Unternehmenspräsentation
  • 15. 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
  • 16. 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
  • 17. 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
  • 18. 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
  • 19. 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
  • 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 - 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
  • 22. 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
  • 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 euch für eure Aufmerksamkeit. Weitere JVM-Sprachen: Groovy (dyn) ►  Clojure (dyn) ►  Fantom (stat/dyn) ►  JRuby (dyn) ►  Gosu (stat) ►  27 Unternehmenspräsentation