STOCKHOLM  14 APRIL, 2011
VAD KAN MAN GÖRA MED SCALA SOM MAN INTEKAN GÖRA MED JAVA?
VAD KAN MAN GÖRA MED JAVA SOM MAN INTEKAN GÖRA MED ASSEMBLER?
En vettigare fråga…VAD ÄR LÄTTARE ATT GÖRA MED SCALA ÄNMED JAVA?
6Minns ni 1997?
7Andra problem 1997…För svårt att programmera    För många plattformarFör farligt att köra kod iwebbläsaren
8Lösningen då:
9Vilka problem har vi idag?För dålig produktivitet     För svårt att underhålla kodKrav på parallellisering
10Några kandidater…
11     Exempel på Clojure-kod(def fib-seq  (concat   [0 1]   ((fn rfib [a b]        (lazy-cons (+ a b) (rfib b (+ a b)))) ...
12En ska bort...
13 Saker att beakta• Verktygsstöd• Antal användare• ”Momentum”
14Och en till...
15            En typisk Java-klasspublic class Customer {    private String firstName;    private String lastName;    publ...
16          Motsvarande Ruby-klassclass Customer     attr_accessor :firstName, :lastNameend
17    ”Statisk typning ger brus”final HashMap<String, String> capitals =     new HashMap<String,String>();capitals.put(”Ja...
18     Dynamisk typningVariabler och fält har ingen typExempel (Ruby):product_number = ”VG-1296H”product_number = 14@paren...
19          Dynamiska språk - metaprogrammeringExempel från Ruby on Rails:class Customer < ActiveRecord::Baseendnew_one = ...
20   Öppna klasserOckså från Ruby on Rails:due_date = 5.days_from_nowHur är detta möjligt!? class Fixnum    def days_from_...
21”Ett nytt språk säger du...?”
22”Kan du bara lägga till en feature i den här koden...”      #:: ::-| ::-| .-. :||-:: 0-| .-| ::||-| .:|-. :||      open(...
23     Håller det i längden?class Customer < ActiveRecord::Baseendnew_one = Customer.newnew_one.   ?
24     Groovy + Grailsclass Customer {    String firstName    String lastName Integer age}newOne = new Customer();
25  Skillnader mot Ruby on RailsGroovy är mycket mer likt JavaGroovy kan vara statiskt typatGrails är mer explicitGrails h...
26Statisktypning
27          Fördelar med statisk typning• Fel fångas i kompilatorn, inte i produktion...• Lättare att orientera sig i okän...
Scalable language
29     Smärtfri integration med Javaval formatter = new java.text.SimpleDateFormat()val thisIsAJavaString = ”You know all ...
30     Scala - ”type inference”val productNumber = ”VG-1296H”// följande rad ger fel!productNumber = 14val capitals = List...
31  Men...Är Scala så svårt egentligen?
32      Exhibit 1class Customer(var firstName: String, var lastName:      String, val birthDate: Date) {    override def t...
33     Exhibit 1 – i Javapublic class Customer {    private String firstName;    private String lastName:    private final...
34     Exhibit 1 – i Java (del 2)    public String getFirstName() {       return firstName;    }    public Date getBirthDa...
35     Exhibit 2val books = List(”Coq Rouge”, ”Ulysses”, ”Papillon”,    ”Pippi Långstrump”)books.foreach(println)val books...
36     Exhibit 2 – i JavaList<String> books = Arrays.asList(”CoqRouge”, ”Ulysses”, ”Papillon”, ”Pippi Långstrump”)for (Str...
37     Exhibit 3case class Rational(numer: Int, denomin: Int) {    def *(that: Rational) = Rational(numer * that.numer,   ...
Scala – en hybridScala är objektorienteratochfunktionellt
39 Varför är detta bra?      delat dataFunktioner förändrar inte tillståndDärför säkert att parallellisera dem
40     Funktioner är värdenvar stringMatches = (s: String) => s.startsWith(”P”)if (stringMatches(”Palle”)) println(”matche...
Funktionell stil uppmuntrasval är det vanliga – var undantagList, Set och Map normalt oföränderligaNästan allting returner...
42         (Nästan) allting returnerar ett värdeval descriptionOfRational =    rational match {       case Rational(x, 1) ...
43    Stolen with pride...Actors – tämligen objektorienteratAPI för parallella systemSkamlös stöld från ErlangBygger på me...
Scalable language
TACK!
Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en
Upcoming SlideShare
Loading in …5
×

Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

785 views

Published on

Manne Fagerlinds slides från Kunskapsbaren 2011 i Stockholm. Ämnet var "Scala och andra språk i JVM:en".

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
785
On SlideShare
0
From Embeds
0
Number of Embeds
18
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en

  1. 1. STOCKHOLM 14 APRIL, 2011
  2. 2. VAD KAN MAN GÖRA MED SCALA SOM MAN INTEKAN GÖRA MED JAVA?
  3. 3. VAD KAN MAN GÖRA MED JAVA SOM MAN INTEKAN GÖRA MED ASSEMBLER?
  4. 4. En vettigare fråga…VAD ÄR LÄTTARE ATT GÖRA MED SCALA ÄNMED JAVA?
  5. 5. 6Minns ni 1997?
  6. 6. 7Andra problem 1997…För svårt att programmera För många plattformarFör farligt att köra kod iwebbläsaren
  7. 7. 8Lösningen då:
  8. 8. 9Vilka problem har vi idag?För dålig produktivitet För svårt att underhålla kodKrav på parallellisering
  9. 9. 10Några kandidater…
  10. 10. 11 Exempel på Clojure-kod(def fib-seq (concat [0 1] ((fn rfib [a b] (lazy-cons (+ a b) (rfib b (+ a b)))) 0 1)))
  11. 11. 12En ska bort...
  12. 12. 13 Saker att beakta• Verktygsstöd• Antal användare• ”Momentum”
  13. 13. 14Och en till...
  14. 14. 15 En typisk Java-klasspublic class Customer { private String firstName; private String lastName; public void setLastName(String lastName) { this.lastName = lastName; } public String getLastName() { Return lastName; } /.../}
  15. 15. 16 Motsvarande Ruby-klassclass Customer attr_accessor :firstName, :lastNameend
  16. 16. 17 ”Statisk typning ger brus”final HashMap<String, String> capitals = new HashMap<String,String>();capitals.put(”Japan”, ”Tokyo”);capitals.put(”Sweden”, ”Stockholm”);capitals.put(”UK”, ”London”);
  17. 17. 18 Dynamisk typningVariabler och fält har ingen typExempel (Ruby):product_number = ”VG-1296H”product_number = 14@parent = File.new(”C:”)@parent = Dad.new(”Homer”, ”Simpson”)
  18. 18. 19 Dynamiska språk - metaprogrammeringExempel från Ruby on Rails:class Customer < ActiveRecord::Baseendnew_one = Customer.newnew_one.first_name = ”Homer”new_one.last_name = ”Simpson”
  19. 19. 20 Öppna klasserOckså från Ruby on Rails:due_date = 5.days_from_nowHur är detta möjligt!? class Fixnum def days_from_now /.../ end end
  20. 20. 21”Ett nytt språk säger du...?”
  21. 21. 22”Kan du bara lägga till en feature i den här koden...” #:: ::-| ::-| .-. :||-:: 0-| .-| ::||-| .:|-. :|| open(Q,$0);while(<Q>){if(/^#(.*)$/){for(split(-,$1)){$q=0;for(split){s/| /:.:/xg;s/:/../g;$Q=$_?length:$_;$q+=$q?$Q:$Q*20;}print chr($q);}}}print"n"; #.: ::||-| .||-| :|||-| ::||-| ||-:: :|||-| .:|
  22. 22. 23 Håller det i längden?class Customer < ActiveRecord::Baseendnew_one = Customer.newnew_one. ?
  23. 23. 24 Groovy + Grailsclass Customer { String firstName String lastName Integer age}newOne = new Customer();
  24. 24. 25 Skillnader mot Ruby on RailsGroovy är mycket mer likt JavaGroovy kan vara statiskt typatGrails är mer explicitGrails har betydligt bättre prestanda
  25. 25. 26Statisktypning
  26. 26. 27 Fördelar med statisk typning• Fel fångas i kompilatorn, inte i produktion...• Lättare att orientera sig i okänd kod• Lättare att bygga utvecklingsverktyg• Bättre prestanda
  27. 27. Scalable language
  28. 28. 29 Smärtfri integration med Javaval formatter = new java.text.SimpleDateFormat()val thisIsAJavaString = ”You know all my methods!”
  29. 29. 30 Scala - ”type inference”val productNumber = ”VG-1296H”// följande rad ger fel!productNumber = 14val capitals = List(”Stockholm”, ”London”, ”Oslo”)// Jfr Java:// final List<String> countries =// Arrays.asList(”Japan”, ”Sweden”, ”UK”);
  30. 30. 31 Men...Är Scala så svårt egentligen?
  31. 31. 32 Exhibit 1class Customer(var firstName: String, var lastName: String, val birthDate: Date) { override def toString() = firstName + ” ” + lastName}
  32. 32. 33 Exhibit 1 – i Javapublic class Customer { private String firstName; private String lastName: private final Date birthDate; public Customer(String firstName, String lastName, Date birthDate) { /.../ } public void setFirstName(String firstName) { this.firstName = firstName; }FORTSÄTTNING FÖLJER...
  33. 33. 34 Exhibit 1 – i Java (del 2) public String getFirstName() { return firstName; } public Date getBirthDate() { return birthDate; } public String toString() { Return firstName + ” ” + lastName; } /* getter och setter för lastName får inte plats */}
  34. 34. 35 Exhibit 2val books = List(”Coq Rouge”, ”Ulysses”, ”Papillon”, ”Pippi Långstrump”)books.foreach(println)val booksStartingWithP = books.filter(_.startsWith(”P”))
  35. 35. 36 Exhibit 2 – i JavaList<String> books = Arrays.asList(”CoqRouge”, ”Ulysses”, ”Papillon”, ”Pippi Långstrump”)for (String book : books) { System.out.println(book);}List<String> booksStartingWithP = new ArrayList<String>();for (String book : books) { if (book.startsWith(”P”)) { booksStartingWithP.add(book); }}
  36. 36. 37 Exhibit 3case class Rational(numer: Int, denomin: Int) { def *(that: Rational) = Rational(numer * that.numer, denomin * that.denomin) override def toString = nomin + "/" + denomin}println(Rational(5, 3) * Rational(7, 9))
  37. 37. Scala – en hybridScala är objektorienteratochfunktionellt
  38. 38. 39 Varför är detta bra? delat dataFunktioner förändrar inte tillståndDärför säkert att parallellisera dem
  39. 39. 40 Funktioner är värdenvar stringMatches = (s: String) => s.startsWith(”P”)if (stringMatches(”Palle”)) println(”matches”)books.filter(stringMatches)// anonym funktionbooks.filter(_.startsWith(”P”))
  40. 40. Funktionell stil uppmuntrasval är det vanliga – var undantagList, Set och Map normalt oföränderligaNästan allting returnerar ett värde!
  41. 41. 42 (Nästan) allting returnerar ett värdeval descriptionOfRational = rational match { case Rational(x, 1) => x.toString case Rational(1, 2) => "one half" case _ => rational.toString }println(if (age < 18) ”child” else ”adult”)
  42. 42. 43 Stolen with pride...Actors – tämligen objektorienteratAPI för parallella systemSkamlös stöld från ErlangBygger på meddelanden mellan virtuella processer
  43. 43. Scalable language
  44. 44. TACK!

×