====== Scala ====== **Sca**lable **la**nguage ===== Start ===== * No primitive types, everything is an object * No semicolon * Object is a singleton * Methods can be defined private or protected. If no modifer is given, method is public. * No static methods ==== Hello World ==== object HelloWorld { def main(args: Array[String]) { println("Hello, world!") } } ===== Control structures ===== if/else-Constructs have a return value ==== for loop ==== for (i <- 1 to 10) println(i) // different steps for (i <- 4 to (17,3)) println(i) // other data types than int for (s <- myList) println(s) // multiple generators for (i <- 0 to 2; j <- 3 to 4) println(i+" "+j) // filter for {i <- 1 to 6 j <- 1 to 6 if (i % 2 == 0) if (j % 2 != 0)} println(i+" "+j) // yield val list: List[Int] = List(1,2,3,4) val result = for (i <- list) yield i * 2 println(result) ==== match ==== Implizites break val iValue = 3 iValue match{ case 1 => println("one") case _ => println("empty") } ===== Singleton objects ===== There are no static methods/vars in scala and singleton objects can't be constructed using a constructor with new. object ScalaObject { val b = 5 def test(a: Double) : Double = { 3.* + b } } ===== Companion object ===== Prerequisite: object and class have the same name and are defined in the same file. Companion objects can access their private variables. Singleton objects without companion clases are standalone objects. ===== Case classes ===== * Use a factory method for construction * All passed parameters are a val-variable of the class * Can be used for pattern matching * Implement toString, hashCode, equals and have a copy method case class Person (firstName : String, lastName : String, age : Int){ def isAdult : Boolean = if (age >= 18) true else false } ===== Inheritance ===== Scala doesn't support multiple inheritance. class B(arg:Int) extends A {} Functions can be overridden with overide before func definition. Overridding classes, functions or variables can be forbidden with prefix final. ==== Abstract classes ==== Difference to Traits: Abstract classes can have constructors. A class which inherits from an abstract class can't inherit from another. The usage of override is optional. ==== Packages object ==== Objects which are visible in a whole package. ===== Identity and equality ===== ==-Operator checks equality (identity in Java) eq-Operator checks identity eq and ne are only defined for clases of type scala.AnyRef. ===== Learning sources ===== http://www.scalatutorial.de/topic143.html