Functional Flashcards
Was ist ein infix Methodenaufruf?
val people: Array[Person] people partition (_.age < 18)
Was bedeutet Immutability in Functional Style?
- val statt var (unveränderlich)
- copy() um State zu verändern (Case Class)
- state im Constructor halten
Was bedeutet Funktionen sind Objekte in Functional Style?
- Funktionen als Parameter:
def fun(p: (A) => Boolean)
Generic A muss in Boolean auflösen (map.filter() ist eine Funktion die das Prinzip nutzt)
Was bedeutet Expressions statt Statements in Functional Style?
val a: array.map().filter()
-
nicht:
for (i in array) {...}
Wie lässt sich numbers.foreach((x: Int) => print(x)) vereinfachen?
numbers foreach print
Was ist eine Higher Order Funktion?
def f(x: Int) = x + 1
-
numbers.foreach(x => f(x))
wird zunumbers foreach f
Beispiel Verkettung von Higher Order Funktionen
List(-10, -5, 0, 5, 10) .filter(_ > 0) .map(x => x * x) .sortWith(_ > _) .foreach(println)
Resultat: 100, 25
Beispiel für Imperative Style VS Functional Style
Functional (übersichtlicher): (1 to 1000000).foldLeft(0)(_ + _)
Imperative (performanter): var x = 1 var sum = 0 while (x <= 1000000) { sum += x x += 1 }
Was macht Imperative Style aus?
- For loops
- Funktionen als Parameter
- Mutable State
Was macht Functional Style aus?
- Rekursion
- Immutable State (in Model Layer)
- Keine getter/setter
- Kein Null oder null, stattdessen Option
- Kein global state
Was ist ein Closure?
- Eine Funktion deren Rückgabewert von Variablen ausserhalb der Funktion abhängt
- Funktionswert eines “open term” (Funktion mit freien Variablen)
- Benutzt von sort, fold, reduce
Anonyme Funktion: val multiplier = (i:Int) => i * 10
Closure Funktion:
var factor = 3 val multiplier = (i:Int) => i * factor
Was ist Currying?
Umwandlung von Funktion mit mehreren Argumenten in Funktionssequenz mit jeweils einem Argument
def f3(c: Int) = (x: Int) => x + c
f3(1)(5) ==> 6
Was ist eine Partially Applied Function?
Eine Curried (Currying) Funktion der nicht die volle Parameter Sequenz übergeben wurde. Und dessen Ergebnisfunktion wir erneut verwenden.
def f4 = f3(10)
f4(5) ==> 15