SPRECHEN SIE SCALA? Heiko Seeberger, WeigleWilczek rheinjug Düsseldorf, 18.03.2010
Jun 08, 2015
SPRECHEN SIE SCALA?Heiko Seeberger, WeigleWilczekrheinjug Düsseldorf, 18.03.2010
WARUM SCALA?
WARUM SCALA?
Which Programming Language would you usenow on top of JVM, except Java? - Scala.
James Gosling
WARUM SCALA?
Scala, it must be stated, is the currentheir apparent to the Java throne.
Charles Nutter
WARUM SCALA?
I can honestly say if someone had shown me ... Scala ... back in 2003 I'd probably have never created Groovy.
James Strachan
WAS IST SCALA?
ausgereiftobjekt-funktional statisch typisiert
leichtgewichtig
knapp und präzise
ausdrucksstark
pragmatischinteroperabel mit Java
AUSGEREIFT
Seit 2003
Version 2.8
OBJEKT-FUNKTIONAL
Any
AnyVal AnyRef
ScalaObject
java.* refscala.* ref
Int
Long
Unit
scala.* val
Null
Nothing
ALLES IST EIN OBJEKT
1, 2, 3 a, b, cf
FUNKTIONALE PROGRAMMIERUNG
Keine Seiteneffekte
Funktionen höherer Ordnung
STATISCH TYPISIERT
LEICHTGEWICHTIG
Semicolon Inference Type Inference
Implicit ConversionsInfix Operator Notation
AUSDRUCKSSTARK
"Calling Person.toString" when { "first and last name are not-empty" should { "return first name blank last name" in { val person = new Person("John", "Doe") person.toString should be ("John Doe") } }}
KNAPP UND PRÄZISE
public class Person { // Java
private final String firstName; private final String lastName;
public Person(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; }
public String getFirstName() { return firstName; }
public String getLastName() { return lastName; }}
class Person(val firstName: String, val lastName: String)
PRAGMATISCH
INTEROPERABEL MIT JAVA
scala> import org.apache.log4j._import org.apache.log4j._
scala> val testLogger = Logger getLogger "test"testLogger: org.apache.log4j.Logger = ...
Wichtig!
LIVE DEMO: HELLO WORLD
LIVE DEMO: OO-GRUNDLAGEN
KlassenKlassen-Parameter Methoden
Default-ArgumenteFelder
Companion Objects
LIVE DEMO: SCALATEST
Test-Werkzeug
DSL-Beispiel
LIVE DEMO: IMPLICIT CONVERSIONS
Für Library-Entwicklung
Skalierbare Sprache
LIVE DEMO: FUNKTIONALE LISTE
Type Inference OperatorenUnveränderlicheObjekte
Funktionen
höherer OrdnungFunktionsliterale Funktionen
LIVE DEMO: TRAITS
Mehrfachvererbung richtig gemacht
Stackabe Modifications
LIVE DEMO: TYP-PARAMETER
Generics richtig gemacht
KovarianzInvarianz
Kontravarianz
Upper Bounds
Lower Bounds
LIVE DEMO: PATTERN MATCHING
Switch richtig gemacht
Constructor PatternVariable Pattern
Sequence Pattern
Wildcard Pattern
Constant Pattern
LIVE DEMO: XML-SUPPORT
Literale in der Sprache
XPath-Abfragen
FRAGEN / DISKUSSION