This is an old revision of the document!


Scala @ PP

Test-driven development

2.1. Writing functions 2.2. Function evaluation (order of parameters in function call matters !)

  1. using the to delay evaluation

2.3. Conditionals

  1. def f(x : Int) = if (x >= 0) x else -x
  2. boolean expressions (true, false, !b, &&, ||)
  3. the “by value” definition using val
  4. example using def and val against a loop

Newton square root estimation

  • Blocks - expressions in Scala
  • visibility of variables in blocks
  • local scoping (similar to let)
  • semicolons (optional)
  • tail recursion in Scala (only direct recursive calls are optimised @tailrec)
  • function types (f : Int ⇒ Int)
  • anonymous functions ((x: Int, y: Int) ⇒ x + y, x ⇒ x+x)
  • currying (def f(x: Int, y: Int)(z: Int):Int = x+y+z)
  • higher-order functions (mapReduce implementation)
  • classes and methods
class Rational(x: Int, y: Int) { // creates a Type as well as a constructor for the new type
    def a = x
    def b = y
}
 
val r = new Rational(1,2)
  • toString and @override
  • the require (a precondition on the caller of a function) (equivalent to) and assert (check the code is right)
  • constructors:
    • multiple constructors:
class ... {
  def this(x: Int) = this(x,1)
}
  • infix notation for functions
  r add s   /*same as*/ r.add(s)
 
  def < (param : Rational)  /* symbolic identifiers may contain operator symbols */
 
  def unary_- (...) /* to overload negation. Careful, white spaces can be interpreted as identifiers */
 
  /* the precedence of an operator is determined by its first character */
  /* precedence cannot be overridden by the programmer */
 
  • object definitions - singleton classes object Empty extends IntSet
  • companion objects (one object per class)
  • annotation @main def birthday - can be called directly from compilation scala birthday …
  • println(s“Hello ”)
  • dynamic binding
  • packages - organising sources - directories (not enforced by the fs)
import pack.Obj
  • traits (similar to interfaces in Java, but can have parameters, contain fields and defined functions)
  • object hierarchy in Scala
  • exceptions (similar to Scala)