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
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
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
o b j e c t HelloWorld { // S i n g l e t o n Object 2 def main ( args : Array [ S t r i n g ] ) { 3 var i : I n t = 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
Vars.scala 1 var x = 5 2 x = x + 1 3 4 var y : I n t = 42 5 6 v a l foo = " I n f e r e d S t r i n g " 7 foo = "New S t r i n g " //won ’ t compile 8 9 l a z y v a l myPair : Pair [ Int , S t r i n g ] = 10 new Pair [ Int , 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 Pair (1 , " s c a l a ") Sven Pfleiderer Scala - A Scalable Language
Class.scala 1 // parameters p r i v a t e 2 class Item ( v a l name : String , 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 quantity : I n t = i q u a n t i t y 6 def otherMethod : S t r i n g = { " Hello Method" } 7 def doNothing : Unit = { /∗ 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 + toAdd 11 // i m p l i c i t return the c u r r e n t q ua n t it y 12 quantity 13 } 14 } Sven Pfleiderer Scala - A Scalable Language
Listing 4: Inheritance.scala 1 class Person ( v a l firstName : String , 2 v a l lastName : String , 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 = " . . . "+firstName+" . . . " 4 def doSomething = {} // wait . . . what? 5 } 6 7 class Student ( firstName : String , lastName : String , 8 age : I n t ) extends Person ( firstName , 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 studying hard . " ) 12 } 13 } Sven Pfleiderer Scala - A Scalable Language
Listing 5: Traits.scala 1 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) : Boolean 3 def i s N o t S i m i l a r ( x : Any) : Boolean = ! 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
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
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
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
Function Literals Listing 6: DSL.scala 1 dont { 2 p r i n t l n ( " Hello ? Can anyone hear 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 } unless (2 > 1) 8 9 dont { 10 p r i n t l n ( "Done counting to 5! " ) 11 } u n t i l ( nextNumber () == 5) Sven Pfleiderer Scala - A Scalable Language
Function Literals Listing 7: Dont.scala 1 def dont ( code : => Unit ) = new DontCommand( code ) 2 3 class DontCommand( code : => Unit ) { 4 def unless ( c o n d i t i o n : => Boolean ) = 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 : => Boolean ) = { 8 while ( ! c o n d i t i o n ) {} 9 code 10 } 11 } Sven Pfleiderer Scala - A Scalable Language