KEMBAR78
Scala: Devnology - Learn A Language Scala | PPTX
packagenl.devnology.workshopimportjava.util._classLearnALanguage(today: Calendar) extendsDevnology{ defwelcome(participants: List[Participant]) {participants.foreach(p => println("welcome" + p))  }  def facilitators() = {  Facilitator("SoemirnoKartosoewito")  ::   Facilitator("Jan Willem Tulp") :: Nil  }}
What’s the plan?Setup development environment (Eclipse + Scalaplugin)Form pair-programming pairsExplanation of basic concepts and syntaxLabs, labs, labs...... and of course: share knowledge!
Euh...Scala?Scala runs on JVM and .Net VMintegrates 100% with existing librarieshybrid language: both functional and OOstatically typed“everything is an object”...Immutability, Currying, Tuples, Closures, Higher Order Functions, etc....
Scala in the enterprise
Run Scala as...Interactive / REPL (Read Eval Print Loop): the scala command starts an interactive shellAs scriptCompiled: scalac command compiles Scala codeSee: http://www.scala-lang.org/node/166
Variables, Values & Type Inferencevarmsg = "welcome to ..." // msg is mutablemsg += " Devnology" msg = 3 // compiler error
Variables, Values & Type Inferencevalmsg = "welcome to ..." // msg is immutablemsg += " Devnology" // compiler errorval n : Int = 3 // explicit type declarationvalname : String = "John"
Functionsdef min(x: Int, y: Int) = if (x < y) x else y// equivalent:def invert(x: Int) = -x // last statement is return valuedef invert(x: Int) : Int = { return –x }Unit can be considered as java’s voidWatch out!def invert(x: Int) { // will return Unit, = is absent  -x}
Every operation is a function call1 + 2    is the same as1.+(2)“to” is not a keyword:  for (i <- 0 to 10) print(i)map containsKey ‘a’   is the same as      map.containsKey(‘a’)
Listsvalscores = List(1, 2, 3) // immutablevalextraScores: List[Int] = 4 :: 5 :: 6 :: Nil// allScores = List(1, 2, 3, 4, 5, 6)// scores = List(1, 2, 3)// extraScores = List(4, 5, 6)valallScores = scores ::: extraScoresvalevenMoreScores = 7 :: allScoresNil is synonym for empty list
Foreachvalscores = List(1, 2, 3)// equivalentscores.foreach((n: Int) => println(n))scores.foreach(n => println(n))scores.foreach(println)
For comprehensionsvalscores = List(1, 2, 3)for (s <- scores)println(s)for (s <- scores if s > 1)println(s)
Arraysvalnames = Array("John", "Jane")names(0) = "Richard" // Arrays are mutableval cities = new Array[String](2)cities(0) = "Amsterdam"cities(1) = "Rotterdam"for (i <- 0 to 1)println(cities(i))
Mapsvaltowns = Map("John" -> "Amsterdam", "Jane" -> "Rotterdam") // default immutable Mapvar a = towns("John") // returns "Amsterdam"a = towns get "John”// returns Some(Amsterdam)a = towns get "John"get // returns "Amsterdam"var r = towns("Bill") // throws NoSuchElementExceptionr = towns get "Bill”// returns Nonetowns.update("John", "Delft") // returns a new Map
Classes & Constructorsclass Person(name: String, age: Int) {if (age < 0) thrownewIllegalArgumentExceptiondefsayHello() { println("Hello, " + name) }}class Person(name: String, age: Int) {require (age >= 0)defsayHello() { println("Hello, " + name) }}
Classes & Constructorsclass Person(name: String, age: Int) {def this(name: String) = this(name, 21) // auxiliarydef this(age: Int) = this(“John”, age) // auxiliarydef this() = this(“John”, 21) // auxiliary}
Classes & Constructorsclass Person(name: String, age: Int)...val p = new Person("John", 33)val a = p.age// compiler errorp.name = "Richard" // compiler errorclass Person(var name: String, val age: Int)
Companion Objects// must be declared in same file as Person classobject Person {defprintName = println("John")}valp = Person // Singleton is also an objectPerson.printName// similar to static methods in Java/C#
Traitstrait Student {varage = 10;  def greet() = {"Hello teacher!"  }  def study(): String // abstract method}
Extending Traitsclass FirstGrader extends Student {  override def greet() = {"Hello amazing teacher!"  }  override def study(): String = {“I am studying really hard!"  }}
Trait Mixin// compiler error: abstract function study from trait Student is not implementedvaljohn = new Person with StudenttraitSimpleStudent {def greet() = "Hello amazing teacher!"}// this is okval john = new Person withSimpleStudentprintln(john.greet())
Scala Applicationobject Person  def main(args: Array[String]) { // define a main method    for (arg <- args)println("Hello " + arg)  }}// or extend Application traitobject Person extends Application {   for (name <- List("John", "Jane")) println("Hello " + name)}
Pattern Matchingvalcolor = if (args.length > 0) args(0) else ""valfruit match {case"red"=>"apple"case"orange" =>"orange"case"yellow" =>"banana"case_ => "yuk!"}
Case Classescase class Var(name: String) extendsExprval v = Var("sum")adds a Factory method with the name of the classall parameters implicitly get a val prefix, so they are maintained as fields“natural” implementation of toString, hashCode and equalsbig advantage: support pattern matching
Exceptionstry {args(0).toFloat} catch {  case ex: NumberFormatException => println("Oops!")}
Tuplesvalpair = ("John", 28) // Tuple2[String, Int]println(pair._1)println(pair._2)def divProd(x: Int, y:Int) = (x / y, x * y)valdp = divProd(10, 2)println(pair._1) // 5println(pair._2) // 20
LABS!!Resources:http://www.scala-lang.org/apihttp://scala-tools.org/scaladocs/scala-library/2.7.1/http://www.codecommit.com/blog/scala/roundup-scala-for-java-refugeeshttp://blogs.sun.com/sundararajan/entry/scala_for_java_programmers
THANK YOU!

Scala: Devnology - Learn A Language Scala

  • 1.
    packagenl.devnology.workshopimportjava.util._classLearnALanguage(today: Calendar) extendsDevnology{defwelcome(participants: List[Participant]) {participants.foreach(p => println("welcome" + p)) } def facilitators() = { Facilitator("SoemirnoKartosoewito") :: Facilitator("Jan Willem Tulp") :: Nil }}
  • 2.
    What’s the plan?Setupdevelopment environment (Eclipse + Scalaplugin)Form pair-programming pairsExplanation of basic concepts and syntaxLabs, labs, labs...... and of course: share knowledge!
  • 3.
    Euh...Scala?Scala runs onJVM and .Net VMintegrates 100% with existing librarieshybrid language: both functional and OOstatically typed“everything is an object”...Immutability, Currying, Tuples, Closures, Higher Order Functions, etc....
  • 4.
    Scala in theenterprise
  • 5.
    Run Scala as...Interactive/ REPL (Read Eval Print Loop): the scala command starts an interactive shellAs scriptCompiled: scalac command compiles Scala codeSee: http://www.scala-lang.org/node/166
  • 6.
    Variables, Values &Type Inferencevarmsg = "welcome to ..." // msg is mutablemsg += " Devnology" msg = 3 // compiler error
  • 7.
    Variables, Values &Type Inferencevalmsg = "welcome to ..." // msg is immutablemsg += " Devnology" // compiler errorval n : Int = 3 // explicit type declarationvalname : String = "John"
  • 8.
    Functionsdef min(x: Int,y: Int) = if (x < y) x else y// equivalent:def invert(x: Int) = -x // last statement is return valuedef invert(x: Int) : Int = { return –x }Unit can be considered as java’s voidWatch out!def invert(x: Int) { // will return Unit, = is absent -x}
  • 9.
    Every operation isa function call1 + 2 is the same as1.+(2)“to” is not a keyword: for (i <- 0 to 10) print(i)map containsKey ‘a’ is the same as map.containsKey(‘a’)
  • 10.
    Listsvalscores = List(1,2, 3) // immutablevalextraScores: List[Int] = 4 :: 5 :: 6 :: Nil// allScores = List(1, 2, 3, 4, 5, 6)// scores = List(1, 2, 3)// extraScores = List(4, 5, 6)valallScores = scores ::: extraScoresvalevenMoreScores = 7 :: allScoresNil is synonym for empty list
  • 11.
    Foreachvalscores = List(1,2, 3)// equivalentscores.foreach((n: Int) => println(n))scores.foreach(n => println(n))scores.foreach(println)
  • 12.
    For comprehensionsvalscores =List(1, 2, 3)for (s <- scores)println(s)for (s <- scores if s > 1)println(s)
  • 13.
    Arraysvalnames = Array("John","Jane")names(0) = "Richard" // Arrays are mutableval cities = new Array[String](2)cities(0) = "Amsterdam"cities(1) = "Rotterdam"for (i <- 0 to 1)println(cities(i))
  • 14.
    Mapsvaltowns = Map("John"-> "Amsterdam", "Jane" -> "Rotterdam") // default immutable Mapvar a = towns("John") // returns "Amsterdam"a = towns get "John”// returns Some(Amsterdam)a = towns get "John"get // returns "Amsterdam"var r = towns("Bill") // throws NoSuchElementExceptionr = towns get "Bill”// returns Nonetowns.update("John", "Delft") // returns a new Map
  • 15.
    Classes & ConstructorsclassPerson(name: String, age: Int) {if (age < 0) thrownewIllegalArgumentExceptiondefsayHello() { println("Hello, " + name) }}class Person(name: String, age: Int) {require (age >= 0)defsayHello() { println("Hello, " + name) }}
  • 16.
    Classes & ConstructorsclassPerson(name: String, age: Int) {def this(name: String) = this(name, 21) // auxiliarydef this(age: Int) = this(“John”, age) // auxiliarydef this() = this(“John”, 21) // auxiliary}
  • 17.
    Classes & ConstructorsclassPerson(name: String, age: Int)...val p = new Person("John", 33)val a = p.age// compiler errorp.name = "Richard" // compiler errorclass Person(var name: String, val age: Int)
  • 18.
    Companion Objects// mustbe declared in same file as Person classobject Person {defprintName = println("John")}valp = Person // Singleton is also an objectPerson.printName// similar to static methods in Java/C#
  • 19.
    Traitstrait Student {varage= 10; def greet() = {"Hello teacher!" } def study(): String // abstract method}
  • 20.
    Extending Traitsclass FirstGraderextends Student { override def greet() = {"Hello amazing teacher!" } override def study(): String = {“I am studying really hard!" }}
  • 21.
    Trait Mixin// compilererror: abstract function study from trait Student is not implementedvaljohn = new Person with StudenttraitSimpleStudent {def greet() = "Hello amazing teacher!"}// this is okval john = new Person withSimpleStudentprintln(john.greet())
  • 22.
    Scala Applicationobject Person def main(args: Array[String]) { // define a main method for (arg <- args)println("Hello " + arg) }}// or extend Application traitobject Person extends Application { for (name <- List("John", "Jane")) println("Hello " + name)}
  • 23.
    Pattern Matchingvalcolor =if (args.length > 0) args(0) else ""valfruit match {case"red"=>"apple"case"orange" =>"orange"case"yellow" =>"banana"case_ => "yuk!"}
  • 24.
    Case Classescase classVar(name: String) extendsExprval v = Var("sum")adds a Factory method with the name of the classall parameters implicitly get a val prefix, so they are maintained as fields“natural” implementation of toString, hashCode and equalsbig advantage: support pattern matching
  • 25.
    Exceptionstry {args(0).toFloat} catch{ case ex: NumberFormatException => println("Oops!")}
  • 26.
    Tuplesvalpair = ("John",28) // Tuple2[String, Int]println(pair._1)println(pair._2)def divProd(x: Int, y:Int) = (x / y, x * y)valdp = divProd(10, 2)println(pair._1) // 5println(pair._2) // 20
  • 27.
  • 28.