Programming in Scala
Scala Nightsession - Agenda►    Part I - Spracheinführung     >  Intro     >  Scala Basics►    Part II - Scripting     >  ...
I – Spracheinführung►    Imperativ     >  Echte Variablen     >  Kontrollstrukturen (if, while, try-catch)     ⇒  Skriptin...
I – SpracheinführungWas ist Scala? Eine Skriptsprache►  Eine Applikationssprache►  Ein Toolkit zum Erstellen von eigenen S...
I – Spracheinführung: DasTypsystemYouve got the best of both worlds, dont you?All our strengths, none of our weaknesses.  ...
I – SpracheinführungEine Einführung von Martin Odersky                             A	  Scalable	  Language                ...
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 erl...
II – Scripting-BasiskomponentenScala‘s Collections:Here be Arrays►    Vollständiges Neudesign      >  Ersetzen die JDK-Col...
II – Scripting-BasiskomponentenCollections: Sequenzen und Maps  Seq (~ java.util.List)  val a = Seq(1,2,4,7)  println(a(3)...
II – Scripting-BasiskomponentenImplizite Konvertierungen►     Selbstdefinierte automatische Typumwandlungen►     Scala‘s P...
II – Scripting-BasiskomponentenImplizite Konvertierungen: Nutzen  >  Natives Einbinden von fremden Libraries     –  Kitten...
I – Scripting mit ScalaLive Coding SessionThemen►    Die Eclipse-IDE►    Package-Objekte und App►    Var, Val und Def►    ...
III - Application Development►    Application Development           14    Unternehmenspräsentation
III – Application DevelopmentScala im „Programming in the Large“ Je größer ein Projekt ist, je mehr Mitarbeiter es hat und...
III – Application Development►    Scalas Schlüsselkomponenten dazu     >  Funktionale Programmierung (FP)       –  Datenve...
III - Funktionale Programmierung►    Prinzipien     >  Trennung von Daten und Funktionen!     >  Zustandlosigkeit►    Date...
III – Funktionale Komponenten in Scala►    Scala integriert die FP als Teil der Objektorientierung     >  Funktionen: Obje...
III - Objektorientierung in Scala►    Klassen     >  Wie in Java, nur kürzer!     >  Case-Klassen: Quick-and-Dirty Datenty...
III – Objektorientierung: Das TypsystemObjektorientierung mit einer aufgeräumten Typhierarchie                            ...
III - Erweiterbarkeit durch FP und OOIn welcher Hinsicht ist Scala erweiterbar?►    Neue Datenstrukturen (Objektorientiert...
III – Das Typsystem: Scalas SprachebenenStatementsGeben Werte zurück, erzeugen Seiteneffektedef a = { 3 }println („Hello W...
LivecodingThemen►    Objektorientierung►    Funktionale Programmierung mit Case-Klassen / Pattern Matching►    Integration...
Abschluss      24    Unternehmenspräsentation
EinsatzszenarienScalas Stärken►    Skripting►    Buildskripte (SBT, baut auf Maven auf)►    Applikationsentwicklung►    Er...
Kritikpunkte►    Sprache     >  XML-Support auf Sprachebene     >  Keine dynamische Typisierung     >  Komplexität?       ...
Ich danke euch für eure Aufmerksamkeit.     Weitere JVM-Sprachen:      Groovy (dyn)     ►       Clojure (dyn)     ►       ...
Nächste SlideShare
Wird geladen in …5
×

Nigh Session Scala

673 Aufrufe

Veröffentlicht am

Diese Präsentation zeigt eine Einführung in die Programmiersprache Scala.

Veröffentlicht in: Technologie
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
673
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
3
Aktionen
Geteilt
0
Downloads
3
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Nigh Session Scala

  1. 1. Programming in Scala
  2. 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. 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. 4. I – SpracheinführungWas 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. 5. I – Spracheinführung: DasTypsystemYouve got the best of both worlds, dont 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. 6. I – SpracheinführungEine Einführung von Martin Odersky A  Scalable  Language Martin Odersky FOSDEM 2009 Martin Odersky, FOSDEM 2009 6 Unternehmenspräsentation
  7. 7. II - Scripting►  Scripting mit Scala 7 Unternehmenspräsentation
  8. 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. 9. II – Scripting-BasiskomponentenScala‘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. 10. II – Scripting-BasiskomponentenCollections: 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. 11. II – Scripting-BasiskomponentenImplizite 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. 12. II – Scripting-BasiskomponentenImplizite 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. 13. I – Scripting mit ScalaLive Coding SessionThemen►  Die Eclipse-IDE►  Package-Objekte und App►  Var, Val und Def►  Implizite Konvertierungen►  Collections 13 Unternehmenspräsentation
  14. 14. III - Application Development►  Application Development 14 Unternehmenspräsentation
  15. 15. III – Application DevelopmentScala 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. 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. 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. 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. 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. 20. III – Objektorientierung: Das TypsystemObjektorientierung 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. 21. III - Erweiterbarkeit durch FP und OOIn 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. 22. III – Das Typsystem: Scalas SprachebenenStatementsGeben Werte zurück, erzeugen Seiteneffektedef a = { 3 }println („Hello World“)TemplatesDefinition von Objekten und Klassentrait Printable { … }class Printer extends Printable{ … }object Printer extends Printer{ … }new { … } with Printable { … }TypenKontrakte aus Klassen, Traits und Methodentype Jlist[T] = java.util.List[T]type Closeable = { def close() }def onClosableList(c : Closeable with Jlist[T]) 22 Unternehmenspräsentation
  23. 23. LivecodingThemen►  Objektorientierung►  Funktionale Programmierung mit Case-Klassen / Pattern Matching►  Integration mit Java-Klassen 23 Unternehmenspräsentation
  24. 24. Abschluss 24 Unternehmenspräsentation
  25. 25. EinsatzszenarienScalas 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 LanguagesJavas Stärken►  GUI-Layouting (GUI-Builder erzeugen immer Java-Code)►  GWT (Es gibt keinen Bytecode-Compiler für GWT)►  JPA-Beans (?) Scala
  26. 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. 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

×