Upload
pfleidi
View
6.462
Download
0
Embed Size (px)
Citation preview
Scala - A Scalable Language
Sven Pfleiderer
HdM Stuttgart, Medieninformatik
18. Mai 2010
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
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
1. Scala im Überblick Geschichte
Geschichte
Entwickelt von Martin OderskyErste Version: 2003Wahrnehmbare Verbreitung seit 2006 mit Version 2.0Beeinflusst von Java, Pizza, Haskell, Erlang, ML, Smalltalk, SchemeAktuelle Versionen: 2.7.7, 2.8 RC2
Sven Pfleiderer Scala - A Scalable Language
1. Scala im Überblick Konzepte
Konzepte
Hybridsprache die OOP und funktionale Programmierung kombiniertSowohl kompiliert als auch interpretiert ausführbarKleiner SprachkernAPIs/DSLs, die sich wie native Syntax verhaltenInteroperabel mit JavaType InferenceAusdrucksstarke Sprachkonstrukte -> Weniger Code“Statically typed dynamic language”
Sven Pfleiderer Scala - A Scalable Language
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
2. Scala und Java Gemeinsamkeiten
Gemeinsamkeiten
Entwickelt für Virtuelle MaschinenLauffähig in der Java-VMStatisch typisiertBenutzt Java KlassenbibliothekBenutzt Java Datentypen
Sven Pfleiderer Scala - A Scalable Language
2. Scala und Java Unterschiede
Unterschiede
SyntaxFunktionale Sprache“Alles ist ein Objekt”Keine statischen Methoden oder VariablenMethoden und Variablen im selben NamespaceKeine Operatoren sondern MethodenaufrufeTraits statt InterfacesDateinamen müssen nicht mit Klassennamen übereinstimmen
Sven Pfleiderer Scala - A Scalable Language
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
3. Syntax Hallo Welt
Hallo Welt
Listing 1: HelloWorld.scala1 ob j e c t He l l oWor ld { // S i n g l e t o n Object2 def main ( a r g s : Ar ray [ S t r i n g ] ) {3 va r i : I n t = 3 ;4 i = i + 25 va r x : I n t = 1.+(3)6 p r i n t l n ( " He l l o , wor ld ! " )7 p r i n t l n ( " i="+i+" , x="+x )8 }9 }
Sven Pfleiderer Scala - A Scalable Language
3. Syntax Variablen und Wertzuweisung
Variablen und Wertzuweisung
Listing 2: Vars.scala1 va r x = 52 x = x + 13
4 va r y : I n t = 425
6 v a l foo = " I n f e r e d S t r i n g "7 f oo = "New S t r i n g " //won ’ t comp i l e8
9 l a z y v a l myPair : Pa i r [ I n t , S t r i n g ] =10 new Pa 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 Pa i r (1 , " s c a l a " )
Sven Pfleiderer Scala - A Scalable Language
3. Syntax Variablen und Wertzuweisung
Klassen und Methodendefinition
Listing 3: Class.scala1 // pa ramete r s p r i v a t e2 c l a s s I tem ( v a l name : S t r i ng , p r i c e : Double ) {3 p r i v a t e va r i q u a n t i t y = 04
5 def quan t i t y : I n t = i q u a n t i t y6 def otherMethod : S t r i n g = { " He l l o Method" }7 def doNothing : Un i t = { /∗ 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 + toAdd11 // i m p l i c i t return the c u r r e n t q u an t i t y12 quan t i t y13 }14 }
Sven Pfleiderer Scala - A Scalable Language
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
4. OOP in Scala Allgemeines
Allgemeines
Parametrisierte Klassen“Mix-in” von TraitsErweitertes Paketsystempublic/private/protected Memberspublic ist StandardKein "package local"
Sven Pfleiderer Scala - A Scalable Language
4. OOP in Scala Vererbung in Scala
Vererbung in Scala
Listing 4: Inheritance.scala1 c l a s s Person ( v a l f i r s tName : S t r i ng ,2 v a l lastName : S t r i ng , 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 tName+" . . . "4 def doSomething = {} // wa i t . . . what ?5 }6
7 c l a s s Student ( f i r s tName : S t r i ng , lastName : S t r i ng ,8 age : I n t ) e x t end s Person ( f i r s tName , 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 s t ud y i n g hard . " )12 }13 }
Sven Pfleiderer Scala - A Scalable Language
4. OOP in Scala Verwendung von Traits
Verwendung von Traits
Listing 5: Traits.scala1 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 ) : Boolean3 def i s N o t S im i l a r ( x : Any ) : Boolean = ! i s S i m i l a r ( x )4 }5
6 c l a s s Tes tC l a s s e x t end s 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 c l a s s Tes tC l a s s e x t end s Othe rC l a s s w i th S i m i l a r i t y {12 . . .13 }
Sven Pfleiderer Scala - A Scalable Language
4. OOP in Scala Singleton Objects
Singleton Objects
Alternative zu statischen MembersWird gewöhnlich als “Companion-Object” verwendetKein Zugriff auf InstanzvariablenKeine ParameterWird eingeleitet durch Schlüsselwort objectSyntax: object Objectname { def hello = "hello"}
Sven Pfleiderer Scala - A Scalable Language
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
5. Funktionale Programmierung in Scala Function Literals
Function Literals
Funktionen sind selbst Werte und werden als solche behandeltKönnen anderen Funktionen übergeben werdenKönnen von anderen Funktionen zurück gegeben werdenKönnen Variablen zugewiesen werdenSyntax: (parameter: String) => { println(parameter) }
Sven Pfleiderer Scala - A Scalable Language
5. Funktionale Programmierung in Scala Function Literals
Einfache DSL mit Function Literals
Listing 6: DSL.scala1 dont {2 p r i n t l n ( " He l l o ? Can anyone hea 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 than 1 . " )7 } un less (2 > 1)8
9 dont {10 p r i n t l n ( "Done coun t i ng to 5 ! " )11 } un t i l ( nextNumber ( ) == 5)
Sven Pfleiderer Scala - A Scalable Language
5. Funktionale Programmierung in Scala Function Literals
Einfache DSL mit Function Literals
Listing 7: Dont.scala1 def dont ( code : => Uni t ) = new DontCommand( code )2
3 c l a s s DontCommand( code : => Uni t ) {4 def un less ( c o n d i t i o n : => Boolean ) =5 i f ( c o n d i t i o n ) code6
7 def u n t i l ( c o n d i t i o n : => Boolean ) = {8 whi le ( ! c o n d i t i o n ) {}9 code
10 }11 }
Sven Pfleiderer Scala - A Scalable Language
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
6. Anwendungsgebiete
Anwendungsgebiete
WebentwicklungVerteilte SystemeMobile ApplikationenTwitter: Backend WebservicesFoursquare: Lift FrameworkJava Ersatz?
Sven Pfleiderer Scala - A Scalable Language
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
7. Wrap Up
Referenzen
http://www.scala-lang.org/http://www.scala-lang.org/node/1658Programming in Scala ISBN: 0981531601http://www.artima.com/scalazinehttp://liftweb.nethttp://lexandera.com/2009/11/dont-in-scala/
Sven Pfleiderer Scala - A Scalable Language
7. Wrap Up
Fragen?
Sven Pfleiderer Scala - A Scalable Language