Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Scala - A scalable language

Scala - A scalable language

pfleidi

May 24, 2012
Tweet

More Decks by pfleidi

Other Decks in Programming

Transcript

  1. 0. Gliederung 1 Scala im Überblick 2 Scala und Java

    3 Syntax 4 OOP in Scala 5 Funktionale Programmierung in Scala 6 Anwendungsgebiete 7 Wrap Up Sven Pfleiderer Scala - A Scalable Language
  2. 1. Scala im Überblick Gliederung 1 Scala im Überblick 2

    Scala und Java 3 Syntax 4 OOP in Scala 5 Funktionale Programmierung in Scala 6 Anwendungsgebiete 7 Wrap Up Sven Pfleiderer Scala - A Scalable Language
  3. 1. Scala im Überblick Geschichte Geschichte Entwickelt von Martin Odersky

    Erste Version: 2003 Wahrnehmbare Verbreitung seit 2006 mit Version 2.0 Beeinflusst von Java, Pizza, Haskell, Erlang, ML, Smalltalk, Scheme Aktuelle Versionen: 2.7.7, 2.8 RC2 Sven Pfleiderer Scala - A Scalable Language
  4. 1. Scala im Überblick Konzepte Konzepte Hybridsprache die OOP und

    funktionale Programmierung kombiniert Sowohl kompiliert als auch interpretiert ausführbar Kleiner Sprachkern APIs/DSLs, die sich wie native Syntax verhalten Interoperabel mit Java Type Inference Ausdrucksstarke Sprachkonstrukte -> Weniger Code “Statically typed dynamic language” Sven Pfleiderer Scala - A Scalable Language
  5. 2. Scala und Java Gliederung 1 Scala im Überblick 2

    Scala und Java 3 Syntax 4 OOP in Scala 5 Funktionale Programmierung in Scala 6 Anwendungsgebiete 7 Wrap Up Sven Pfleiderer Scala - A Scalable Language
  6. 2. Scala und Java Gemeinsamkeiten Gemeinsamkeiten Entwickelt für Virtuelle Maschinen

    Lauffähig in der Java-VM Statisch typisiert Benutzt Java Klassenbibliothek Benutzt Java Datentypen Sven Pfleiderer Scala - A Scalable Language
  7. 2. Scala und Java Unterschiede Unterschiede Syntax Funktionale Sprache “Alles

    ist ein Objekt” Keine statischen Methoden oder Variablen Methoden und Variablen im selben Namespace Keine Operatoren sondern Methodenaufrufe Traits statt Interfaces Dateinamen müssen nicht mit Klassennamen übereinstimmen Sven Pfleiderer Scala - A Scalable Language
  8. 3. Syntax Gliederung 1 Scala im Überblick 2 Scala und

    Java 3 Syntax 4 OOP in Scala 5 Funktionale Programmierung in Scala 6 Anwendungsgebiete 7 Wrap Up Sven Pfleiderer Scala - A Scalable Language
  9. 3. Syntax Hallo Welt Hallo Welt Listing 1: HelloWorld.scala 1

    o b j e c t HelloWorld { // S i n g l e t o n Object 2 def main ( args : Array [ S t r i n g ] ) { 3 var i : I n t = 3; 4 i = i + 2 5 var x : I n t = 1.+(3) 6 p r i n t l n ( " Hello , world ! " ) 7 p r i n t l n ( " i="+i+" , x="+x ) 8 } 9 } Sven Pfleiderer Scala - A Scalable Language
  10. 3. Syntax Variablen und Wertzuweisung Variablen und Wertzuweisung Listing 2:

    Vars.scala 1 var x = 5 2 x = x + 1 3 4 var y : I n t = 42 5 6 v a l foo = " I n f e r e d S t r i n g " 7 foo = "New S t r i n g " //won ’ t compile 8 9 l a z y v a l myPair : Pair [ Int , S t r i n g ] = 10 new Pair [ Int , S t r i n g ] ( 1 , " s c a l a ") 11 12 v a l s h o r t P a i r = new Pair (1 , " s c a l a ") Sven Pfleiderer Scala - A Scalable Language
  11. 3. Syntax Variablen und Wertzuweisung Klassen und Methodendefinition Listing 3:

    Class.scala 1 // parameters p r i v a t e 2 class Item ( v a l name : String , p r i c e : Double ) { 3 p r i v a t e var i q u a n t i t y = 0 4 5 def quantity : I n t = i q u a n t i t y 6 def otherMethod : S t r i n g = { " Hello Method" } 7 def doNothing : Unit = { /∗ Nothing ∗/ } 8 9 def add ( toAdd : I n t ) = { 10 i q u a n t i t y = i q u a n t i t y + toAdd 11 // i m p l i c i t return the c u r r e n t q ua n t it y 12 quantity 13 } 14 } Sven Pfleiderer Scala - A Scalable Language
  12. 4. OOP in Scala Gliederung 1 Scala im Überblick 2

    Scala und Java 3 Syntax 4 OOP in Scala 5 Funktionale Programmierung in Scala 6 Anwendungsgebiete 7 Wrap Up Sven Pfleiderer Scala - A Scalable Language
  13. 4. OOP in Scala Allgemeines Allgemeines Parametrisierte Klassen “Mix-in” von

    Traits Erweitertes Paketsystem public/private/protected Members public ist Standard Kein "package local" Sven Pfleiderer Scala - A Scalable Language
  14. 4. OOP in Scala Vererbung in Scala Vererbung in Scala

    Listing 4: Inheritance.scala 1 class Person ( v a l firstName : String , 2 v a l lastName : String , v a l age : I n t ) { 3 o v e r r i d e def t o S t r i n g = " . . . "+firstName+" . . . " 4 def doSomething = {} // wait . . . what? 5 } 6 7 class Student ( firstName : String , lastName : String , 8 age : I n t ) extends Person ( firstName , lastName , age ) 9 { 10 o v e r r i d e def doSomething = { 11 System . out . p r i n t l n ( " I ’m studying hard . " ) 12 } 13 } Sven Pfleiderer Scala - A Scalable Language
  15. 4. OOP in Scala Verwendung von Traits Verwendung von Traits

    Listing 5: Traits.scala 1 t r a i t S i m i l a r i t y { 2 def i s S i m i l a r ( x : Any) : Boolean 3 def i s N o t S i m i l a r ( x : Any) : Boolean = ! i s S i m i l a r ( x ) 4 } 5 6 class TestClass extends S i m i l a r i t y { 7 . . . 8 def i s S i m i l a r . . . 9 } 10 11 class TestClass extends OtherClass with S i m i l a r i t y { 12 . . . 13 } Sven Pfleiderer Scala - A Scalable Language
  16. 4. OOP in Scala Singleton Objects Singleton Objects Alternative zu

    statischen Members Wird gewöhnlich als “Companion-Object” verwendet Kein Zugriff auf Instanzvariablen Keine Parameter Wird eingeleitet durch Schlüsselwort object Syntax: object Objectname { def hello = "hello"} Sven Pfleiderer Scala - A Scalable Language
  17. 5. Funktionale Programmierung in Scala Gliederung 1 Scala im Überblick

    2 Scala und Java 3 Syntax 4 OOP in Scala 5 Funktionale Programmierung in Scala 6 Anwendungsgebiete 7 Wrap Up Sven Pfleiderer Scala - A Scalable Language
  18. 5. Funktionale Programmierung in Scala Function Literals Function Literals Funktionen

    sind selbst Werte und werden als solche behandelt Können anderen Funktionen übergeben werden Können von anderen Funktionen zurück gegeben werden Können Variablen zugewiesen werden Syntax: (parameter: String) => { println(parameter) } Sven Pfleiderer Scala - A Scalable Language
  19. 5. Funktionale Programmierung in Scala Function Literals Einfache DSL mit

    Function Literals Listing 6: DSL.scala 1 dont { 2 p r i n t l n ( " Hello ? Can anyone hear me?" ) ; 3 } 4 5 dont { 6 p r i n t l n ( "Yep , 2 r e a l l y i s g r e a t e r than 1. " ) 7 } unless (2 > 1) 8 9 dont { 10 p r i n t l n ( "Done counting to 5! " ) 11 } u n t i l ( nextNumber () == 5) Sven Pfleiderer Scala - A Scalable Language
  20. 5. Funktionale Programmierung in Scala Function Literals Einfache DSL mit

    Function Literals Listing 7: Dont.scala 1 def dont ( code : => Unit ) = new DontCommand( code ) 2 3 class DontCommand( code : => Unit ) { 4 def unless ( c o n d i t i o n : => Boolean ) = 5 i f ( c o n d i t i o n ) code 6 7 def u n t i l ( c o n d i t i o n : => Boolean ) = { 8 while ( ! c o n d i t i o n ) {} 9 code 10 } 11 } Sven Pfleiderer Scala - A Scalable Language
  21. 6. Anwendungsgebiete Gliederung 1 Scala im Überblick 2 Scala und

    Java 3 Syntax 4 OOP in Scala 5 Funktionale Programmierung in Scala 6 Anwendungsgebiete 7 Wrap Up Sven Pfleiderer Scala - A Scalable Language
  22. 6. Anwendungsgebiete Anwendungsgebiete Webentwicklung Verteilte Systeme Mobile Applikationen Twitter: Backend

    Webservices Foursquare: Lift Framework Java Ersatz? Sven Pfleiderer Scala - A Scalable Language
  23. 7. Wrap Up Gliederung 1 Scala im Überblick 2 Scala

    und Java 3 Syntax 4 OOP in Scala 5 Funktionale Programmierung in Scala 6 Anwendungsgebiete 7 Wrap Up Sven Pfleiderer Scala - A Scalable Language
  24. 7. Wrap Up Referenzen http://www.scala-lang.org/ http://www.scala-lang.org/node/1658 Programming in Scala ISBN:

    0981531601 http://www.artima.com/scalazine http://liftweb.net http://lexandera.com/2009/11/dont-in-scala/ Sven Pfleiderer Scala - A Scalable Language