SlideShare ist ein Scribd-Unternehmen logo
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

Weitere ähnliche Inhalte

Was ist angesagt?

P6oo
P6ooP6oo
P6oo
lichtkind
 
Perl 5 Quiz Chemnitz Edition
Perl 5 Quiz Chemnitz EditionPerl 5 Quiz Chemnitz Edition
Perl 5 Quiz Chemnitz Edition
lichtkind
 
C Sharp Einfuehrung Teil 1
C Sharp Einfuehrung Teil 1C Sharp Einfuehrung Teil 1
C Sharp Einfuehrung Teil 1
DraphonyGames
 
Slides
SlidesSlides
7 - Sprachen Des Semantic Web - SPARQL
7 - Sprachen Des Semantic Web - SPARQL7 - Sprachen Des Semantic Web - SPARQL
7 - Sprachen Des Semantic Web - SPARQL
Steffen Schloenvoigt
 
Einführung in .NET mit C#
Einführung in .NET mit C#Einführung in .NET mit C#
Einführung in .NET mit C#
mspgermany
 
Real lifefp
Real lifefpReal lifefp
Real lifefp
Daniel Rosowski
 

Was ist angesagt? (7)

P6oo
P6ooP6oo
P6oo
 
Perl 5 Quiz Chemnitz Edition
Perl 5 Quiz Chemnitz EditionPerl 5 Quiz Chemnitz Edition
Perl 5 Quiz Chemnitz Edition
 
C Sharp Einfuehrung Teil 1
C Sharp Einfuehrung Teil 1C Sharp Einfuehrung Teil 1
C Sharp Einfuehrung Teil 1
 
Slides
SlidesSlides
Slides
 
7 - Sprachen Des Semantic Web - SPARQL
7 - Sprachen Des Semantic Web - SPARQL7 - Sprachen Des Semantic Web - SPARQL
7 - Sprachen Des Semantic Web - SPARQL
 
Einführung in .NET mit C#
Einführung in .NET mit C#Einführung in .NET mit C#
Einführung in .NET mit C#
 
Real lifefp
Real lifefpReal lifefp
Real lifefp
 

Ähnlich wie Scala - A Scalable Language

SCALA: ein kurzer Überblick
SCALA: ein kurzer ÜberblickSCALA: ein kurzer Überblick
SCALA: ein kurzer Überblick
Roland Ewald
 
Funktionales Programmieren mit Clojure
Funktionales Programmieren mit ClojureFunktionales Programmieren mit Clojure
Funktionales Programmieren mit Clojure
Dr. Christian Betz
 
Perl - die Taschenkettensäge unter den Programmiersprachen - Vortrag 2003
Perl - die Taschenkettensäge unter den Programmiersprachen - Vortrag 2003Perl - die Taschenkettensäge unter den Programmiersprachen - Vortrag 2003
Perl - die Taschenkettensäge unter den Programmiersprachen - Vortrag 2003
Brigitte Jellinek
 
Designpatterns in Ruby
Designpatterns in RubyDesignpatterns in Ruby
Designpatterns in Ruby
pfleidi
 
Wundertüte Perl
Wundertüte PerlWundertüte Perl
Wundertüte Perl
lichtkind
 
LINQ - Einheitlicher Datenzugriff in .NET
LINQ - Einheitlicher Datenzugriff in .NETLINQ - Einheitlicher Datenzugriff in .NET
LINQ - Einheitlicher Datenzugriff in .NET
GFU Cyrus AG
 
5 - Sprachen des Semantic Web - Formale Semantik In RDF(S)
5 - Sprachen des Semantic Web - Formale Semantik In RDF(S)5 - Sprachen des Semantic Web - Formale Semantik In RDF(S)
5 - Sprachen des Semantic Web - Formale Semantik In RDF(S)
Steffen Schloenvoigt
 
Perl 5.20: Feature, Kultur, Module, Werkzeuge
Perl 5.20: Feature, Kultur, Module, WerkzeugePerl 5.20: Feature, Kultur, Module, Werkzeuge
Perl 5.20: Feature, Kultur, Module, Werkzeuge
lichtkind
 
Programmieren mit PROLOG
Programmieren mit PROLOGProgrammieren mit PROLOG
Programmieren mit PROLOG
QAware GmbH
 
Einführung in Scala im Vergleich mit Java
Einführung in Scala im Vergleich mit JavaEinführung in Scala im Vergleich mit Java
Einführung in Scala im Vergleich mit Java
Marcel Rehfeld
 
Scala
ScalaScala
Ruby On Rails Einführung
Ruby On Rails EinführungRuby On Rails Einführung
Ruby On Rails Einführung
Reinhold Weber
 
Solr
SolrSolr
#SpeakRoslyn - Die Microsoft .NET Compiler Plattform
#SpeakRoslyn - Die Microsoft .NET Compiler Plattform#SpeakRoslyn - Die Microsoft .NET Compiler Plattform
#SpeakRoslyn - Die Microsoft .NET Compiler Plattform
Robin Sedlaczek
 
Article - JDK 8 im Fokus der Entwickler
Article - JDK 8 im Fokus der EntwicklerArticle - JDK 8 im Fokus der Entwickler
Article - JDK 8 im Fokus der Entwickler
Wolfgang Weigend
 
Fundamentale Muster in Java
Fundamentale Muster in JavaFundamentale Muster in Java
Fundamentale Muster in Java
tutego
 
OpenCms 8.5 kurz vorgestellt [LinuxTag 2013]
OpenCms 8.5 kurz vorgestellt [LinuxTag 2013]OpenCms 8.5 kurz vorgestellt [LinuxTag 2013]
OpenCms 8.5 kurz vorgestellt [LinuxTag 2013]
Alkacon Software GmbH & Co. KG
 
Einfuehrung in Apache Spark
Einfuehrung in Apache SparkEinfuehrung in Apache Spark
Einfuehrung in Apache Spark
Jens Albrecht
 

Ähnlich wie Scala - A Scalable Language (20)

Web Entwicklung mit PHP - Teil 1
Web Entwicklung mit PHP - Teil 1Web Entwicklung mit PHP - Teil 1
Web Entwicklung mit PHP - Teil 1
 
Web Entwicklung mit PHP - Teil 2
Web Entwicklung mit PHP - Teil 2Web Entwicklung mit PHP - Teil 2
Web Entwicklung mit PHP - Teil 2
 
SCALA: ein kurzer Überblick
SCALA: ein kurzer ÜberblickSCALA: ein kurzer Überblick
SCALA: ein kurzer Überblick
 
Funktionales Programmieren mit Clojure
Funktionales Programmieren mit ClojureFunktionales Programmieren mit Clojure
Funktionales Programmieren mit Clojure
 
Perl - die Taschenkettensäge unter den Programmiersprachen - Vortrag 2003
Perl - die Taschenkettensäge unter den Programmiersprachen - Vortrag 2003Perl - die Taschenkettensäge unter den Programmiersprachen - Vortrag 2003
Perl - die Taschenkettensäge unter den Programmiersprachen - Vortrag 2003
 
Designpatterns in Ruby
Designpatterns in RubyDesignpatterns in Ruby
Designpatterns in Ruby
 
Wundertüte Perl
Wundertüte PerlWundertüte Perl
Wundertüte Perl
 
LINQ - Einheitlicher Datenzugriff in .NET
LINQ - Einheitlicher Datenzugriff in .NETLINQ - Einheitlicher Datenzugriff in .NET
LINQ - Einheitlicher Datenzugriff in .NET
 
5 - Sprachen des Semantic Web - Formale Semantik In RDF(S)
5 - Sprachen des Semantic Web - Formale Semantik In RDF(S)5 - Sprachen des Semantic Web - Formale Semantik In RDF(S)
5 - Sprachen des Semantic Web - Formale Semantik In RDF(S)
 
Perl 5.20: Feature, Kultur, Module, Werkzeuge
Perl 5.20: Feature, Kultur, Module, WerkzeugePerl 5.20: Feature, Kultur, Module, Werkzeuge
Perl 5.20: Feature, Kultur, Module, Werkzeuge
 
Programmieren mit PROLOG
Programmieren mit PROLOGProgrammieren mit PROLOG
Programmieren mit PROLOG
 
Einführung in Scala im Vergleich mit Java
Einführung in Scala im Vergleich mit JavaEinführung in Scala im Vergleich mit Java
Einführung in Scala im Vergleich mit Java
 
Scala
ScalaScala
Scala
 
Ruby On Rails Einführung
Ruby On Rails EinführungRuby On Rails Einführung
Ruby On Rails Einführung
 
Solr
SolrSolr
Solr
 
#SpeakRoslyn - Die Microsoft .NET Compiler Plattform
#SpeakRoslyn - Die Microsoft .NET Compiler Plattform#SpeakRoslyn - Die Microsoft .NET Compiler Plattform
#SpeakRoslyn - Die Microsoft .NET Compiler Plattform
 
Article - JDK 8 im Fokus der Entwickler
Article - JDK 8 im Fokus der EntwicklerArticle - JDK 8 im Fokus der Entwickler
Article - JDK 8 im Fokus der Entwickler
 
Fundamentale Muster in Java
Fundamentale Muster in JavaFundamentale Muster in Java
Fundamentale Muster in Java
 
OpenCms 8.5 kurz vorgestellt [LinuxTag 2013]
OpenCms 8.5 kurz vorgestellt [LinuxTag 2013]OpenCms 8.5 kurz vorgestellt [LinuxTag 2013]
OpenCms 8.5 kurz vorgestellt [LinuxTag 2013]
 
Einfuehrung in Apache Spark
Einfuehrung in Apache SparkEinfuehrung in Apache Spark
Einfuehrung in Apache Spark
 

Scala - A Scalable Language

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