Scala
Scalable language
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
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
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.