Funktionale Programmierung in Java?
Versteht jemand, was bei der zweiten Methode gefragt wird?
Ich schätze mal, es muss ein neuer Punkt generiert in dem die Funktion before angewendet wird. Und dann? Composition soll ja ein Boolean zurückgeben. Ich finde funktionale Programmierung sehr verwirrend :(.
2 Antworten
Der Code ist gruselig! Ich nehme an, FunctionalImage bekommt eine Funktion f(Point)->Boolean und macht daraus ein Schwarzweißbild.
Das Interface Function<> ist für Methodenparameter und Rückgabetypen geeignet. Es gibt nur selten einen Grund, eine Variable vom Typ Function<> anzulegen. Deine erste Methode lässt sich auch so schreiben:
/** Prüfe, ob p nahe an der y-Achse liegt.
**/
private static Boolean vertical ( Point p ) {
return Math.abs(p.x) < 0.5;
}
/** Erzeuge ein Bild, das einen Streifen um die y-Achse zeigt.
**/
public static FunctionalImage createStrip() {
return new FunctionalImage(vertical);
}
Die Methode vertical() mag ja noch ihre Daseinsberechtigung haben, wenn es mehrere solche Baustein-Methoden gibt, aus denen verschiedene Bilder aufgebaut werden können. Aber bei createStrip() sehe ich keinerlei Mehrwert. Und bei den Methodennamen ist auch noch Luft nach oben. Mein Vorschlag: isAtYaxis() und createVerticalStripImage().
Deine zweite Methode funktioniert nicht: Offenbar will sie zwei Funktionen verknüpfen, aber die zweite fehlt komplett. Im Body von composition() fehlt damit der Rückgabewert. Das compiliert nicht. Da müsste noch etwas stehen wie
return after.apply(p);
So würde es klappen (mit sinnvolleren Namen):
public FunctionalImage compose( Function<Point,Point> transform
, Function<Point,Boolean> test )
{
return new FunctionalImage( transform.andThen(test) );
}
Aber auch hier sticht mir der Mehrwert dieser Methode nicht ins Auge.
Deine Funktion "composition" soll nach wie vor ein Boolean zurückgeben. Du wendest "before" auf p an und gibst p dann an die Funktion weiter, die das Bild repräsentiert (aber keine Ahnung, welche das sein soll, womöglich "this" oder soetwas?).