Your SlideShare is downloading. ×
0
Scala taxonomy
Scala taxonomy
Scala taxonomy
Scala taxonomy
Scala taxonomy
Scala taxonomy
Scala taxonomy
Scala taxonomy
Scala taxonomy
Scala taxonomy
Scala taxonomy
Scala taxonomy
Scala taxonomy
Scala taxonomy
Scala taxonomy
Scala taxonomy
Scala taxonomy
Scala taxonomy
Scala taxonomy
Scala taxonomy
Scala taxonomy
Scala taxonomy
Scala taxonomy
Scala taxonomy
Scala taxonomy
Scala taxonomy
Scala taxonomy
Scala taxonomy
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 taxonomy

539

Published on

Scala terms explained for Java developer, immutability, implicits, pattern matching, futures

Scala terms explained for Java developer, immutability, implicits, pattern matching, futures

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
539
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
12
Comments
0
Likes
2
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. Scala taxonomy explainedfrom Java programmerRadim.Pavlicek@gmail.com
  • 2. Agenda● OO Features● Pattern matching● Functional Programming● Actors● Futures● Implicits
  • 3. Data Transfer Objetsclass Person {private String firstName;String getFirstName() {return firstName;}void setFirstName(String aFirstName) {this.firstName = aFirstName;}}
  • 4. toString@Overridepublic String toString() {return "Person{" +"firstName=" + firstName + +", lastName=" + lastName + +};}
  • 5. equals@Overridepublic boolean equals(Object o) {if (this == o) return true;if (!(o instanceof Person)) return false;Person person = (Person) o;if (!firstName.equals(person.firstName))return false;if (!lastName.equals(person.lastName))return false;return true}
  • 6. hashCode@Overridepublic int hashCode() {int result = firstName.hashCode();result = 31 * result + lastName.hashCode();return result;}
  • 7. Builderstatic class Builder {String aName = "Radim";Builder withFirstName(String aName) {this.name = aName; return this;}Person build() {Person p = new Person; p.setName(aName);return p;}
  • 8. Case Classescase class Person(firstName: String ="Bill", lastName :String = "Gates")val me = Person(lastName = "Crosby")● Immutable● toString, equals, hashCode● person.copy(lastName="Malkin")
  • 9. Laziness in JavaInteger cached = null;Integer getExpensiveComputation() {if (null == cached) {cached = doCount();}return cached;}
  • 10. Lazy Definitionlazy val count = doCount()
  • 11. Importsimport scala.collection.immutable.Mapobject HelloWorld {def main(args: Array[String]) {import scala.collection.immutable.{Map=>MobNumbers}val my : MobNumbers[String, String] =MobileNumbers("radim" -> "6767982408")Console.print( my("radim") )}}
  • 12. Java: Singletonspublic class Singleton {private Singleton INSTANCE = null;private Singleton() {}public Singleton getInstance() {if (null == INSTANCE) {INSTANCE = new Singleton()}}
  • 13. Objectsclass CompanionObjects(val id: Long, valdescription: String = "")object CompanionObjects{def zero = new CompanionObjects(id = 0,description = "zero")def apply(id:Int, description:String)= newCompanionObjets(id,description)def one = CompanionObjets(1, "one")val errorMessage = "ID should be positive"}
  • 14. Pattern matchingIn Java:Switch statements with String cases havebeen implemented in Java SE 7, at least 16years after they were first requested.
  • 15. Pattern matchingobject Matching extends App {val name :AnyRef= ...name match {case "Radim" => println("me")case "crosby" | "sidney" => println("NHL")case Seq("sidney", _) => println("sidney withsomeone")case Seq("sidney", _*) => println("sidney with group")case x: Int if x < 0 => println("negative number")case y => println("Unknown " + y)}}
  • 16. scala.annotation.switch(ch: @switch) match {case a if eof => println("a with oef")case b => println("b")case c => println("c")}
  • 17. Functional programming
  • 18. ImmutabilityJavaString, BigDecimalScalaval immutable = 1var mutable = 2mutable = 3
  • 19. Immutability cont.val n = "123".reverseval m = n.reverseprintln(n, m) // 321, 123val o = new StringBuffer("123").reverse()val p = o.reverse()println(o, p) // 123, 123
  • 20. Higher order functionsobject Collections extends App{val c = 4 to 8val s: IndexedSeq[String] = c map(_+"th")s map (_.toUpperCase)println(s) //4th, 5th, 6th, 7th, 8th}
  • 21. Parallel collectionobject Parralel extends App{def time[R](block: => R): R = {val t0 = System.nanoTime()val result = block // call-by-nameval t1 = System.nanoTime()println("Elapsed time: " + (t1 - t0)/1000000 + " ms")result}val c = 1 to 10000000time { c map (_ + 1) } //4935 mstime { c.par map (_ + 1) } //3723 ms}
  • 22. Curryingobject Curry extends App{def product(i: Int)(j: Int) = i * jdef times2 = product(2)_def times3 = product(3)_println(times2 (4)) //8println(times3 (4)) //12}
  • 23. Partial functionsval sample = 1 to 10val isEven: PartialFunction[Int, String] ={case x if x % 2 == 0 => x+" is even"}// the method collect can use isDefinedAtto select which members to collectval evenNumbers = sample collect isEvenprintln(evenNumbers)
  • 24. Actors
  • 25. Futuresimport ExecutionContext.Implicits.globalobject Futures extends App {@volatile var totalA = 0val text = Future {Thread.sleep(1000); val a = "a" * 16}text onSuccess {case txt => totalA += txt.count(_ == a)}println(totalA) // 0Thread.sleep(1000); println(totalA) //0Thread.sleep(1000); println(totalA) //16}
  • 26. Implicit conversionsJava:String.valueOf(int i),Integer.parseInt(String s)Scala:(1 to 4).foreach(println)
  • 27. Implicit parametersobject ImplicitParam extends App{def max[T](a: T, b: T)(implicit $ev1: Ordering[T]): T =..class Timeout(val milis: Int)object Timeout {def apply(milis: Int) = new Timeout(milis)implicit val t: Timeout = Timeout(10)}def query(i: Int)(implicit t: Timeout) {println(t.milis)}query(1)
  • 28. To be continued...

×