====== 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