in xtend eine Funktion als Parameter übergeben

Alles in xtend ist eine Expression. Dadurch ist es möglich eine Methode einer anderen Methode als Parameter zu übergeben, wie hier beschrieben:

Wir brauchen dafür die folgenden Methoden:
(1) Die calledFunction, welche als Argument übergeben wird,
(2) die callingFunction, welche die calledFunction übergibt
(3) und die genericFunction, welche die calledFunction empfängt.

Die (3) genericFunction wird immer wie folgt implementiert:

def Type genericFunction((Type)=>Type calledFunction){
Type parameter = new Type()
val result = calledFunction.apply(parameter)
}

Um (1) und (2) zu implementieren haben wir die zwei Möglichkeiten (A) und (B):

A: (1) und (2) können als Methoden implementiert werden:

(1) calledFunction:
def Type calledFunction(Type parameter){
parameter.foobar
}

(2) callingFunction:
def Type callingFunction(){
genericFunction([Type parameter | parameter.calledFunction])
}
oder, noch besser lesbar (da wir nur einen Parameter haben):
(2) callingFunction:
def Type callingFunction(){
genericFunction([calledFunction])
}


B: (1) kann als Variable implementiert werden:

(1) calledFunction:
(Type)=>Type calledFunction = [parameter | parameter.foobar]

(2) callingFunction:
def Type callingFunction(){
genericFunction(calledFunction)
}

Ich bevorzuge A, da (1) und (3) wie immer implementiert werden und in (2) die Übergabe einer Funktion als Parameter deutlich erkennbar ist.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.