Your SlideShare is downloading. ×
0
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Scala introduction
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Scala introduction

5,403

Published on

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

No Downloads
Views
Total Views
5,403
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
181
Comments
0
Likes
8
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. If I were to pick a language to use on the JVM today other than Java, it would be Scala. – James Gosling, creator of Java http://www.adam-bien.com/roller/abien/entry/java_net_javaone_which_programming Scala, it must be stated, is the current heir apparent to the Java throne. No other language on the JVM seems as capable of being a "replacement for Java" as Scala, and the momentum behind Scala is now unquestionable. – Charlies Nutter, JRuby lead http://blog.headius.com/2009/04/future-part-one.html My tip though for the long term replacement of javac is Scala. I'm very impressed with it! I can honestly say if someone had shown me the Programming in Scala book […] back in 2003 I'd probably have never created Groovy. – James Strachan, creator of Groovy http://macstrac.blogspot.com/2009/04/scala-as-long-term-replacement-for.html
  2. Agenda <ul><li>Background and motivation
  3. Intro to Scala </li><ul><li>Basic syntax
  4. Pattern matching
  5. Functions
  6. Classes and traits </li></ul><li><break />
  7. Practical Scala </li></ul>
  8. About us <ul><li>Alf Kristian Støyle and Fredrik Vraalsen
  9. Java developers with 6 and 9 years experience
  10. Scala enthusiasts since 2008
  11. Developed SubmitIT for JavaZone
  12. Alf worked on Scala application for Kommuneforlaget
  13. Held 4 Scala training courses for 60+ participants </li></ul>
  14.  
  15. public class Person { private int age ; private String name ; public Person( int age, String name) { this . age = age; this . name = name; } public int getAge() { return this . age ; } public void setAge( int age) { this . age = age; } public String getName() { return this . name ; } public void setName(String name) { this . name = name; } } class Person ( var age : Int , var name : String )
  16. List<Person> persons = ... List<Person> adults = new LinkedList<Person>(); List<Person> kids = new LinkedList<Person>(); for (Person person : persons) { if (person.getAge() < 18) { kids.add(person); } else { adults.add(person); } } val persons : List [ Person ] = ... val ( kids , adults ) = persons . partition (_. age < 18)
  17. using ( new BufferedReader ( new FileReader ( &quot;f.txt&quot; ))) { reader => println ( reader . readLine() ) } BufferedReader reader = null ; try { reader = new BufferedReader( new FileReader( &quot;f.txt&quot; )); System. out .println(reader.readLine()); } finally { if (reader != null ) { try { reader.close(); } catch (IOException e) { // Exception on close, ignore } } }
  18. Scala <ul><li>Object oriented and functional
  19. Statically typed
  20. Java compatible </li><ul><li>Compiles to Java bytecode
  21. Existing libraries/frameworks </li></ul><li>Better Java </li></ul>
  22. ;
  23. public class Person { private int age ; private String name ; public Person( int age, String name) { this . age = age; this . name = name; } public int getAge() { return this . age ; } public void setAge( int age) { this . age = age; } public String getName() { return this . name ; } public void setName(String name) { this . name = name; } }
  24. public class Person { private int age private String name public Person( int age, String name) { this . age = age this . name = name } public int getAge() { return this . age } public void setAge( int age) { this . age = age } public String getName() { return this . name } public void setName(String name) { this . name = name } }
  25. Variables var i : Int = 42
  26. Variables var i = 42 i = 3 i = &quot;Hello world!&quot; // compile error
  27. Values val i = 42 i = 3 // compile error
  28. Methods def sum ( a : Int , b : Int ): Int = { return a + b }
  29. Methods def sum ( a : Int , b : Int ): Int = { a + b }
  30. Methods def sum ( a : Int , b : Int ) = { a + b }
  31. Methods def sum ( a : Int , b : Int ) = a + b
  32. Methods def sayHello ( name : String ) { println ( &quot;Hello, &quot; + name ) }
  33. Methods &quot;apple&quot; . charAt (0) &quot;apple&quot; charAt 0 1.0.+(2.0) 1.0 + 2.0
  34. Collections val list = List ( &quot;apple&quot; , &quot;orange&quot; , &quot;banana&quot; ) val map = Map (1 -> &quot;one&quot; , 2 -> &quot;two&quot; ) val array = Array (1, 2, 3, 4, 5) list (1) // orange map (2) // two array (3) // 4
  35. myObject match { case 1 => println ( &quot;First&quot; ) case 2 => println ( &quot;Second&quot; ) case _ => println ( &quot;Unknown&quot; ) } Pattern matching
  36. myObject match { case i : Int => println ( &quot;Found number &quot; + i ) case s : String => println ( &quot;Found text &quot; + s ) case _ => println ( &quot;Unknown&quot; ) } Pattern matching
  37. val email = &quot;&quot;&quot; (.+) @ (.+) &quot;&quot;&quot; . r &quot; scala @ java.no &quot; match { case email ( name , domain ) => println ( &quot;User &quot; + name + &quot; at &quot; + domain ) case x => println ( x + &quot; is not an email&quot; ) } Pattern matching
  38. val numbers = List (1, 2, 3) val secondNumber = numbers match { case List (_, i , _*) => Some ( i ) case _ => None } => secondNumber : Option [ Int ] = Some (2) Pattern matching
  39. Functions Predicate <Integer> even = new Predicate <Integer>() { @ Override public boolean apply(Integer i) { return i % 2 == 0; } }; List<Integer> numbers = … // 1, 2, 3, 4 Iterable<Integer> evenNums = Iterables .filter(numbers, even); => [2, 4] Google collections:
  40. Functions val even = ( i : Int ) => i % 2 == 0 val numbers = List (1, 2, 3, 4) val evenNums = numbers . filter ( even ) => List(2, 4) Scala collections:
  41. Functions val numbers = List (1, 2, 3, 4) val evenNums = numbers . filter (( i : Int ) => i % 2 == 0) => List(2, 4) Scala collections:
  42. Functions val numbers = List (1, 2, 3, 4) val evenNums = numbers . filter ( i => i % 2 == 0) => List(2, 4) Scala collections:
  43. Functions val numbers = List (1, 2, 3, 4) val evenNums = numbers . filter (_ % 2 == 0) => List(2, 4) Scala collections:
  44. Functions Predicate <Integer> even = new Predicate <Integer>() { @ Override public boolean apply(Integer i) { return i % 2 == 0; } }; val numbers = List (1, 2, 3, 4) val evenNums = numbers . filter (_ % 2 == 0) => List(2, 4) Scala collections:
  45. Functions #boolean(int) even = #(int i)(i % 2 == 0) JDK7 lambda expressions: val even = ( i : Int ) => i % 2 == 0 Scala functions:
  46. Functions Iterables.filter(numbers, #(int i)(i % 2 == 0)) JDK7 lambda expressions: numbers . filter (_ % 2 == 0) Scala functions:
  47. Control structures return values val numbers = for ( i <- 1 to 10) yield i val res = if ( cond ) x else y val res2 = try { x } catch { … y } finally { … }
  48. Classes and constructors class Person ( val age : Int )
  49. Classes and constructors class Person ( val age : Int ) { def this () = this (42) var name : String = _ override def toString = &quot;My name is &quot; + name }
  50. Traits (= Interface + Mixin) <ul><li>“Multiple inheritance done right”
  51. Implement methods
  52. Initialized fields
  53. Abstract methods and fields
  54. Does not support constructors
  55. Call to super -> strict semantics </li></ul>
  56. scala.Ordered trait trait Ordered [ A ] { def compare ( that : A ): Int def < ( that : A ): Boolean = ( this compare that ) < 0 def > ( that : A ): Boolean = ( this compare that ) > 0 def <= ( that : A ): Boolean = ( this compare that ) <= 0 def >= ( that : A ): Boolean = ( this compare that ) >= 0 }
  57. The Ordered trait class Person ( val age : Int ) extends Ordered [ Person ] { def compare ( other : Person ) = this . age - other . age } val person1 = new Person (21) val person2 = new Person (31) person1 < person2 // true person1 <= person2 // true person1 >= person2 // false
  58. “Dynamic mixins” class Person ( val name : String, val age : Int ) { override def toString = &quot;My name is &quot; + name } trait Loud { override def toString = super . toString . toUpperCase } val person = new Person ( &quot;Fredrik&quot; , 18) with Loud println ( person ) => MY NAME IS FREDRIK
  59. Just scratching the surface... <ul><li>Tuples
  60. Singleton objects
  61. Closures
  62. For-comprehensions
  63. Implicit conversions
  64. Actors
  65. Native XML data types
  66. Parsers </li></ul>
  67. Q & A
  68. val xml = <break time=&quot;15&quot; />
  69. Practical Scala <ul><li>The downside
  70. Tools
  71. ScalaTest
  72. Java interoperability
  73. Learning curve
  74. Your choice </li><ul><li>Functional programming
  75. Implicit conversions
  76. Higher order functions </li></ul></ul>
  77. IDE support <ul><li>Netbeans - very good, but inferior in other areas
  78. IntelliJ IDEA - very good, but slow compilation
  79. Eclipse - bad, but very fast when working </li></ul>
  80. Backward compatibility <ul><li>Binary compatibility broken several times
  81. Think twice before using a library </li></ul>
  82. Tools demo <ul><li>REPL - Read eval print loop
  83. Maven
  84. SBT - Simple Build Tool
  85. IntelliJ IDEA </li></ul>
  86. JRebel <ul><li>&quot;Complete Java projects 10-23 % faster&quot;
  87. Hotswap on steroids
  88. Commercial, but free for Scala </li></ul>
  89. ScalaTest demo <ul><li>DSL for testing
  90. Powerful assertions
  91. Different test styles </li><ul><li>JUnit
  92. Functional tests
  93. BDD test </li></ul></ul>
  94. The feel of Scala http://parleys.com/#id=10&st=5&sl=1
  95. Java interoperability demo <ul><li>Scala using Java
  96. Java using Scala
  97. Mixed projects? </li></ul>
  98. Learning curve <ul><li>Syntax small smack in the face
  99. Easy to write Java-ish Scala
  100. The language scales with your understanding
  101. Gradually migrate to more functional style </li></ul>
  102. What would you like to hear? <ul><li>Functional programming </li><ul><li>What is it all about? </li></ul><li>Implicit conversion </li><ul><li>Why does &quot;gnirtS.gnal.avaj&quot;.reverse work? </li></ul><li>Higher order functions </li><ul><li>How does the using/resource handling example work? </li></ul></ul>
  103. “Functional programming” <ul><li>First class functions
  104. Pattern matching
  105. Higher order functions </li></ul>
  106. Functional programming <ul><li>Mathematical functions have no side effects
  107. f(x) = 2x + 3 </li></ul>
  108. In practice <ul><li>Only immutable objects (and object graphs) </li><ul><li>All field must be immutable
  109. No side-effects from method calls
  110. All methods must return something </li></ul></ul>
  111. Example scala.List <ul><li>head :: tail </li></ul>val list = List (1, 2) val myList = 1 :: 2 :: Nil // 0 :: 1 :: 2 :: Nil val myotherList = 0 :: myList
  112. scala.collection.immutable <ul><li>...or scala.collection.mutable
  113. Pick your poison! </li></ul>
  114. Strive to be pure <ul><li>Concurrency
  115. Easier to avoid errors
  116. Easier to test </li></ul>
  117. We have a lot to learn
  118. Q & A
  119. Resources <ul><li>scala@java.no (http://lister.java.no/mailman/listinfo/scala)
  120. http://scala.java.no
  121. http://www.slideshare.net/stoyle/scala-intro
  122. http://github.com/stoyle/javaBin-demo
  123. fredrik@vraalsen.no, alf.kristian@gmail.com </li></ul>

×