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 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
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
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 Maschinen
   Lauffähig in der Java-VM
   Statisch typisiert
   Benutzt Java Klassenbibliothek
   Benutzt Java Datentypen




                            Sven Pfleiderer   Scala - A Scalable Language
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
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.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
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
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
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 Traits
   Erweitertes Paketsystem
   public/private/protected Members
   public ist Standard
   Kein "package local"




                           Sven Pfleiderer   Scala - A Scalable Language
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
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
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
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 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
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
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
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




   Webentwicklung
   Verteilte Systeme
   Mobile Applikationen
   Twitter: Backend Webservices
   Foursquare: Lift Framework
   Java 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/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
7. Wrap Up


Fragen?




          Sven Pfleiderer   Scala - A Scalable Language

Scala - A Scalable Language

  • 1.
    Scala - AScalable 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 undJava 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 undJava 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 undJava 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 inScala 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 inScala 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 inScala 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 inScala 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 inScala 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 Programmierungin 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 Programmierungin 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 Programmierungin 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 Programmierungin 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
  • 26.
    7. Wrap Up Fragen? Sven Pfleiderer Scala - A Scalable Language