1. Scala - A Scalable Language
Sven Pfleiderer
HdM Stuttgart, Medieninformatik
18. Mai 2010
2. 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
3. 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
4. 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
5. 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
6. 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
7. 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
8. 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
9. 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
10. 3. Syntax Hallo Welt
Hallo Welt
Listing 1: HelloWorld.scala
1 o b j e c t H e l l o W o r l d { // S i n g l e t o n O b j e c t
2 def main ( a r g s : A r r a y [ S t r i n g ] ) {
3 var i : Int = 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
11. 3. Syntax Variablen und Wertzuweisung
Variablen und Wertzuweisung
Listing 2: Vars.scala
1 var x = 5
2 x = x + 1
3
4 v a r y : I n t = 42
5
6 val foo = " I n f e r e d String "
7 f o o = "New S t r i n g " //won ’ t c o m p i l e
8
9 l a z y v a l myPair : P a i r [ I n t , S t r i n g ] =
10 new P a i r [ I n t , 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 P a i r ( 1 , " s c a l a " )
Sven Pfleiderer Scala - A Scalable Language
12. 3. Syntax Variablen und Wertzuweisung
Klassen und Methodendefinition
Listing 3: Class.scala
1 // p a r a m e t e r s p r i v a t e
2 c l a s s I t e m ( v a l name : S t r i n g , 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 q u a n t i t y : I n t = i q u a n t i t y
6 def o t h e r M e t h o d : S t r i n g = { " H e l l o Method " }
7 def d o N o t h i n g : U n i t = { /∗ N o t h i n g ∗/ }
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 r e t u r n t h e c u r r e n t q u a n t i t y
12 quantity
13 }
14 }
Sven Pfleiderer Scala - A Scalable Language
13. 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
14. 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
15. 4. OOP in Scala Vererbung in Scala
Vererbung in Scala
Listing 4: Inheritance.scala
1 c l a s s Person ( v a l firstName : String ,
2 v a l l a s t N a m e : S t r i n g , 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 = " . . . "+f i r s t N a m e+" . . . "
4 def doSomething = {} // w a i t . . . what ?
5 }
6
7 c l a s s Student ( f i r s t N a m e : S t r i n g , lastName : S t r i n g ,
8 age : I n t ) e x t e n d s P e r s o n ( f i r s t N a m e , lastName , age )
9 {
10 o v e r r i d e def doSomething = {
11 System . o u t . p r i n t l n ( " I ’m s t u d y i n g h a r d . " )
12 }
13 }
Sven Pfleiderer Scala - A Scalable Language
16. 4. OOP in Scala Verwendung von Traits
Verwendung von Traits
Listing 5: Traits.scala
1 trait Similarity {
2 def i s S i m i l a r ( x : Any ) : B o o l e a n
3 def i s N o t S i m i l a r ( x : Any ) : B o o l e a n = ! 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
17. 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
18. 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
19. 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
20. 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 ( " H e l l o ? Can anyone h e a r 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 t h a n 1 . " )
7 } unless (2 > 1)
8
9 dont {
10 p r i n t l n ( " Done c o u n t i n g t o 5 ! " )
11 } u n t i l ( nextNumber ( ) == 5 )
Sven Pfleiderer Scala - A Scalable Language
21. 5. Funktionale Programmierung in Scala Function Literals
Einfache DSL mit Function Literals
Listing 7: Dont.scala
1 def d o n t ( code : => U n i t ) = new DontCommand ( code )
2
3 c l a s s DontCommand ( code : => U n i t ) {
4 def u n l e s s ( c o n d i t i o n : => B o o l e a n ) =
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 : => B o o l e a n ) = {
8 w h i l e ( ! c o n d i t i o n ) {}
9 code
10 }
11 }
Sven Pfleiderer Scala - A Scalable Language
22. 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
23. 6. Anwendungsgebiete
Anwendungsgebiete
Webentwicklung
Verteilte Systeme
Mobile Applikationen
Twitter: Backend Webservices
Foursquare: Lift Framework
Java Ersatz?
Sven Pfleiderer Scala - A Scalable Language
24. 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
25. 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