Your SlideShare is downloading. ×
Kunskapsbaren 2011 Stockholm - Scala och andra nya språk i JVM:en
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

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

608
views

Published on

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

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
608
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. STOCKHOLM 14 APRIL, 2011
  • 2. VAD KAN MAN GÖRA MED SCALA SOM MAN INTEKAN GÖRA MED JAVA?
  • 3. VAD KAN MAN GÖRA MED JAVA SOM MAN INTEKAN GÖRA MED ASSEMBLER?
  • 4. En vettigare fråga…VAD ÄR LÄTTARE ATT GÖRA MED SCALA ÄNMED JAVA?
  • 5. 6Minns ni 1997?
  • 6. 7Andra problem 1997…För svårt att programmera För många plattformarFör farligt att köra kod iwebbläsaren
  • 7. 8Lösningen då:
  • 8. 9Vilka problem har vi idag?För dålig produktivitet För svårt att underhålla kodKrav på parallellisering
  • 9. 10Några kandidater…
  • 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. 12En ska bort...
  • 12. 13 Saker att beakta• Verktygsstöd• Antal användare• ”Momentum”
  • 13. 14Och en till...
  • 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. 16 Motsvarande Ruby-klassclass Customer attr_accessor :firstName, :lastNameend
  • 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. 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. 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. 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. 21”Ett nytt språk säger du...?”
  • 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. 23 Håller det i längden?class Customer < ActiveRecord::Baseendnew_one = Customer.newnew_one. ?
  • 23. 24 Groovy + Grailsclass Customer { String firstName String lastName Integer age}newOne = new Customer();
  • 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. 26Statisktypning
  • 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. Scalable language
  • 28. 29 Smärtfri integration med Javaval formatter = new java.text.SimpleDateFormat()val thisIsAJavaString = ”You know all my methods!”
  • 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. 31 Men...Är Scala så svårt egentligen?
  • 31. 32 Exhibit 1class Customer(var firstName: String, var lastName: String, val birthDate: Date) { override def toString() = firstName + ” ” + lastName}
  • 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. 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. 35 Exhibit 2val books = List(”Coq Rouge”, ”Ulysses”, ”Papillon”, ”Pippi Långstrump”)books.foreach(println)val booksStartingWithP = books.filter(_.startsWith(”P”))
  • 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. 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. Scala – en hybridScala är objektorienteratochfunktionellt
  • 38. 39 Varför är detta bra? delat dataFunktioner förändrar inte tillståndDärför säkert att parallellisera dem
  • 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. Funktionell stil uppmuntrasval är det vanliga – var undantagList, Set och Map normalt oföränderligaNästan allting returnerar ett värde!
  • 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. 43 Stolen with pride...Actors – tämligen objektorienteratAPI för parallella systemSkamlös stöld från ErlangBygger på meddelanden mellan virtuella processer
  • 43. Scalable language
  • 44. TACK!