- en bedre og mere effektiv Java?

                     Jesper Kamstrup Linnet
                     jesper@linnet-data.dk
...
Om mig

•Freelancekonsulent
• Java- og .NET-udvikler/arkitekt
• Sprogbegejstret
Agenda

•Hvad er Scala?
• En bedre Java?
• Ready for prime time?
Kort om Scalas historie


• Startet i 2001
• Skabt af Martin Odersky
Hvad er Scala?
En bedre Java?
Java         Scala




                  + ?
          J av a+
Er Java dødt som sprog?




                     Kilde: InfoQ.com
Kendetegn


• Statisk typet
• Skalabilitet i højsædet
Hybridsprog

         =
 Objektorienteret
         +
Funktionsorienteret
Objektorienteret



1.to(5)        Range(1, 2, 3, 4, 5)
Funktionsorienteret


          val a = 10



   val f = (x: Int) => x + 5
Immutability

•   Centralt for
    funktionsprogrammering
•   Vigtigt for parallelisering
• Letter kodelæsning
Hvad gør Scala mere
     effektivt?
Hello, world



println("Hello, world")
Syntaktisk sukker




               Image: Suat Eman / FreeDigitalPhotos.net
Kompakt syntaks (1)
            Java                           Scala
public class Person {
    private final String name;
...
Kompakt syntaks (2)
                        Java                                Scala
                                    ...
copy method ala                 2 .8
                                   Sc


val person = Person("Jesper", "Kbh")

val new...
Kompakt syntaks (3)
class   Car {
	 var   driven = 0.0
	
	 def   drive(distance: Double) = driven += distance
	 	
	 def   ...
Collections
val list = List(1,2,3)
val map = Map(
	 	 	 	 	 "Jesper" -> 39,
	 	 	 	 	 "Peter" -> 55
				)
val set = Set(1,...
Hvad foretrækker du?
            Java                          Scala
List<Integer> numbers = ...        val numbers = ...
...
Anonyme funktioner
val list = List(1,2,3,4)

list filter isEven                List(2, 4)



list filter { n => n % 2 == 0...
Operationer på List (1)
val list = List(1,2,3,4)


list map (x => x * x)      List(1, 4, 9, 16)
list sum                  ...
Closures
var outside = 5
val closure = (i: Int) => i * outside

println(closure(2))                     10


outside = 10
...
Pattern matching (1)

value match {
    case 1 => println("Tal")
    case i: Int => printf("Tallet %d", i)
    case "test"...
Pattern matching (2)
                                             Lister
value match {
    case List(_, _) => println("To ...
Pattern matching (3)
                             Regulære udtryk
val Danish = "Hej (.*)".r
val English = "Hi, (.*)".r

gr...
Pattern matching (4)
                                 Case classes


value match {
	 case Person(_, "Kbh") => println("Køb...
XML (1)


val personsXml =
	 <persons>
	 	 <person name="Jesper"><age>38</age></person>
	 	 <person name="Ulla"><age>{age}...
XML (2)

val persons = personsXml  "person"

val name = person  "@name"




val names = personsXml  "@name"
XML (3)


node match {
	 case <name>{name}</name> => println(name)
	 case _ => println("Andet")
}
Duck typing




“If it walks like a duck, and quacks like a
          duck, then it is a duck”
Duck typing

public class Text extends ... {
	 public void setText (String string) {


public class Button extends ... {
	...
Duck typing m. Scala

def update(control: { def setText(text: String) }) = {
	 	 control.setText("Hello, world")
}




typ...
Traits (1)
                          Som interface
trait Editable {
	 def isEditable(): Boolean
}

class EditablePerson ex...
Traits (2)
                  Definition af mixin

trait Persistable {
	 val entityManager: EntityManager = ...

	 def save ...
Traits (3)
                    Statisk brug af mixin

class Car extends Vehicle with Persistable {
	 ...
}

val car = new ...
Traits (4)
              Dynamisk brug af mixin

class Bicycle extends Vehicle {
	 ...
}

val bicycle = new Bicycle with P...
Traits (5)
                                   Overstyring
trait LoggingCollection extends
               java.util.Collect...
Traits (6)
                         Eksempel: Observer
trait Subject {
  type Observer = { def receiveUpdate(subject:Any) ...
Parallelisering

•Højere abstraktionsniveau
• Aktørmodel
• Beskedudveksling
• Share-nothing
Simpel aktør

import scala.actors.Actor._

actor {
	 calculateStuff
}

// stuff in main thread
Beskedudveksling

val parrot = actor {
	 while (true) {
	 	 receive {
	 	 	 case msg =>
	 	 	 	 println("Msg: " + msg)
	 	...
Ready for prime time?
Scala i den virkelige
       verden
Masser af information

• http://scala-lang.org
• Bøger

• Tutorials og artikler
Hvorfor ikke Scala?

•Ny syntaks
• “Ungt” sprog
• Værktøjsunderstøttelse
Hvorfor Scala?

•Kompatibilitet med Java
• Stærkere syntaks
• I fremgang
Hvorfor Scala?
“You only fully comprehend
the awesomeness of #scala
when after weeks of being
pure scala you have to edit
...
Konklusion


En bedre og mere
  effektiv Java?
Kontakt

•   Slides: http://bit.ly/scala-7n

• jesper@linnet-data.dk
• http://twitter.com/jesper_linnet
• http://blog.kams...
Spørgsmål?
- en bedre og mere effektiv Java?

                     Jesper Kamstrup Linnet
                     jesper@linnet-data.dk
...
Upcoming SlideShare
Loading in...5
×

Scala - en bedre og mere effektiv Java?

1,665

Published on

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.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,665
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Scala - en bedre og mere effektiv Java?"

  1. 1. - en bedre og mere effektiv Java? Jesper Kamstrup Linnet jesper@linnet-data.dk 7N IT-konference 2010 5. maj 2010
  2. 2. Om mig •Freelancekonsulent • Java- og .NET-udvikler/arkitekt • Sprogbegejstret
  3. 3. Agenda •Hvad er Scala? • En bedre Java? • Ready for prime time?
  4. 4. Kort om Scalas historie • Startet i 2001 • Skabt af Martin Odersky
  5. 5. Hvad er Scala?
  6. 6. En bedre Java? Java Scala + ? J av a+
  7. 7. Er Java dødt som sprog? Kilde: InfoQ.com
  8. 8. Kendetegn • Statisk typet • Skalabilitet i højsædet
  9. 9. Hybridsprog = Objektorienteret + Funktionsorienteret
  10. 10. Objektorienteret 1.to(5) Range(1, 2, 3, 4, 5)
  11. 11. Funktionsorienteret val a = 10 val f = (x: Int) => x + 5
  12. 12. Immutability • Centralt for funktionsprogrammering • Vigtigt for parallelisering • Letter kodelæsning
  13. 13. Hvad gør Scala mere effektivt?
  14. 14. Hello, world println("Hello, world")
  15. 15. Syntaktisk sukker Image: Suat Eman / FreeDigitalPhotos.net
  16. 16. 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; }
  17. 17. 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() { ... }
  18. 18. copy method ala 2 .8 Sc val person = Person("Jesper", "Kbh") val newPerson = person.copy(address = "Aarhus") Person(Jesper,Aarhus)
  19. 19. 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
  20. 20. 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)
  21. 21. 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); } }
  22. 22. 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 }
  23. 23. Operationer på List (1) 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))
  24. 24. Closures var outside = 5 val closure = (i: Int) => i * outside println(closure(2)) 10 outside = 10 println(closure(2)) 20
  25. 25. 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") }
  26. 26. Pattern matching (2) Lister value match { case List(_, _) => println("To elementer") case List(1, rest @ _*) => println("1 og flere") }
  27. 27. 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) }
  28. 28. Pattern matching (4) Case classes value match { case Person(_, "Kbh") => println("Københavner") case _ => println("Uden for København") }
  29. 29. XML (1) val personsXml = <persons> <person name="Jesper"><age>38</age></person> <person name="Ulla"><age>{age}</age></person> </persons>
  30. 30. XML (2) val persons = personsXml "person" val name = person "@name" val names = personsXml "@name"
  31. 31. XML (3) node match { case <name>{name}</name> => println(name) case _ => println("Andet") }
  32. 32. Duck typing “If it walks like a duck, and quacks like a duck, then it is a duck”
  33. 33. Duck typing public class Text extends ... { public void setText (String string) { public class Button extends ... { public void setText (String string) {
  34. 34. Duck typing m. Scala def update(control: { def setText(text: String) }) = { control.setText("Hello, world") } type ControlWithText = { def setText(text: String) } def update(control: ControlWithText) = { control.setText("Hello, world") }
  35. 35. Traits (1) Som interface trait Editable { def isEditable(): Boolean } class EditablePerson extends Editable { def isEditable() = true }
  36. 36. Traits (2) Definition af mixin trait Persistable { val entityManager: EntityManager = ... def save = { entityManager.persist(this) } }
  37. 37. Traits (3) Statisk brug af mixin class Car extends Vehicle with Persistable { ... } val car = new Car car.save
  38. 38. Traits (4) Dynamisk brug af mixin class Bicycle extends Vehicle { ... } val bicycle = new Bicycle with Persistable bicycle.save
  39. 39. Traits (5) Overstyring trait LoggingCollection extends java.util.Collection[String] { abstract override def add(e: String) = { printf("Adding: %s", e) super.add(e) } } val coll = new java.util.ArrayList[String] with LoggingCollection
  40. 40. Traits (6) Eksempel: Observer trait Subject { type Observer = { def receiveUpdate(subject:Any) } private var observers = List[Observer]() def addObserver(observer:Observer) = observers ::= observer def notifyObservers = observers foreach (_.receiveUpdate(this)) }
  41. 41. Parallelisering •Højere abstraktionsniveau • Aktørmodel • Beskedudveksling • Share-nothing
  42. 42. Simpel aktør import scala.actors.Actor._ actor { calculateStuff } // stuff in main thread
  43. 43. Beskedudveksling val parrot = actor { while (true) { receive { case msg => println("Msg: " + msg) } } } parrot ! "Hello, Polly"
  44. 44. Ready for prime time?
  45. 45. Scala i den virkelige verden
  46. 46. Masser af information • http://scala-lang.org • Bøger • Tutorials og artikler
  47. 47. Hvorfor ikke Scala? •Ny syntaks • “Ungt” sprog • Værktøjsunderstøttelse
  48. 48. Hvorfor Scala? •Kompatibilitet med Java • Stærkere syntaks • I fremgang
  49. 49. 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)
  50. 50. Konklusion En bedre og mere effektiv Java?
  51. 51. Kontakt • Slides: http://bit.ly/scala-7n • jesper@linnet-data.dk • http://twitter.com/jesper_linnet • http://blog.kamstrup-linnet.dk
  52. 52. Spørgsmål?
  53. 53. - en bedre og mere effektiv Java? Jesper Kamstrup Linnet jesper@linnet-data.dk 7N IT-konference 2010 5. maj 2010
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×