scala - a scalable language

Post on 17-May-2015

6.462 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

top related