Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
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

744 Aufrufe

Veröffentlicht am

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

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

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

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

×