Scala er et Java-relateret, statisk typet programmeringssprog i hastig fremmarch. Sproget kombinerer aspekter fra objekt- og funktionsorienterede sprog og fokuserer på skalerbarhed og effektivitet, både på det kodemæssige og afviklingsmæssige niveau. Syntaksen er elegant og koncis. Samtidig indeholder sproget stærke konstruktioner til understøttelse af parallelle applikationer, der udnytter fremtidens hardwarearkitekturer.
Java som sprog har ikke bevæget sig meget de seneste år. Vi har stadig ikke closures eller funktionelle aspekter som f.eks. C# har haft siden version 3. Er Scala svaret på enhver Javaudviklers bønner eller er sproget kun interessant for tågehoveder som mig, som begynder at synes bedre og bedre om funktionsorientering? Er den store portion syntaktisk sukker, Scala bringer på bordet, bare tomme kalorier?
1 of 54
More Related Content
Scala - en bedre Java?
1. - en bedre Java?
Jesper Kamstrup Linnet
jesper@linnet-data.dk
Community Day 2010
27. maj 2010
18. Kompakt syntaks (1)
Java Scala
public class Person {
private final String name;
class Person(
private final String address; val name: String,
public Person(String name,
val address: String);
String address) {
this.name = name;
this.address = address;
}
public String getName() {
return name;
}
public String getAddress() {
return address;
}
19. Kompakt syntaks (2)
Java Scala
case class Person(
public class Person {
private final String name;
private final String address;
public Person(String name, String address) {
this.name = name;
name: String,
address: String);
this.address = address;
}
public String getName() {
return name;
}
public String getAddress() {
return address;
}
@Override
public int hashCode() {
...
}
@Override
public boolean equals(Object obj) {
...
}
@Override
public String toString() {
...
}
20. Kompakt syntaks (3)
class Car {
var driven = 0.0
def drive(distance: Double) = driven += distance
def milesDriven = driven * 1.6
}
...
val car = new Car
car drive 10
21. copy method ala 2 .8
Sc
val person = Person("Jesper", "Kbh")
val newPerson = person.copy(address = "Aarhus")
Person(Jesper,Aarhus)
22. Collections
val list = List(1,2,3)
val map = Map(
"Jesper" -> 39,
"Peter" -> 55
)
val set = Set(1, 2, 5, 2)
val array = Array(1, 2, 3)
23. Hvad foretrækker du?
Java Scala
List<Integer> numbers = ... val numbers = ...
List<Integer> result = val result =
new ArrayList<Integer>(); numbers filter isEven
for (Integer number : numbers) {
if (isEven(number) {
result.add(number);
}
}
24. Anonyme funktioner
val list = List(1,2,3,4)
list filter isEven List(2, 4)
list filter { n => n % 2 == 0 }
list filter { _ % 2 == 0 }
25. Eksempler
val list = List(1,2,3,4)
list map (x => x * x) List(1, 4, 9, 16)
list sum 10
list mkString "," 1,2,3,4
list forall { _ < 5 } true
list partition isEven (List(2, 4),
List(1, 3))
26. Pattern matching (1)
value match {
case 1 => println("Tal")
case i: Int => printf("Tallet %d", i)
case "test" => println("Streng")
case (x, y) => printf("Et par, x=%s, y=%s", x, y)
case _ => println("Alt andet")
}
27. Pattern matching (2)
Lister
value match {
case List(_, _) => println("To elementer")
case List(1, rest @ _*) => println("1 og flere")
}
28. Pattern matching (3)
Regulære udtryk
val Danish = "Hej (.*)".r
val English = "Hi, (.*)".r
greeting match {
case Danish(name) => printf("Dansk: %s", name)
case English(name) => printf("Engelsk: %s", name)
}
29. Pattern matching (4)
Case classes
value match {
case Person(_, "Kbh") => println("Københavner")
case _ => println("Uden for København")
}
30. XML (1)
val personsXml =
<persons>
<person name="Jesper"><age>38</age></person>
<person name="Ulla"><age>{age}</age></person>
</persons>
31. XML (2)
val persons = personsXml "person"
val name = person "@name"
val names = personsXml "@name"
32. XML (3)
node match {
case <name>{name}</name> => println(name)
case _ => println("Andet")
}
33. Duck typing
“If it walks like a duck, and quacks like a
duck, then it is a duck”
34. Duck typing
public class Text extends ... {
public void setText (String string) {
public class Button extends ... {
public void setText (String string) {
50. Hvorfor Scala?
“You only fully comprehend
the awesomeness of #scala
when after weeks of being
pure scala you have to edit
some Java again...”
James Strachan (@jstrachan)