Dieser Artikel wurde auch veröffentlicht in Ich habe eine Funktion höherer Ordnung in Go-Sprache geschrieben und damit gespielt. Dies ist eine Hommage an .com / _makanai / items / ca313c8e117da78154fa). Es macht nur Spaß (wie im Originalartikel). Wenn Sie also nach einer nützlichen Implementierung suchen, wird empfohlen, den Browser zurückzusetzen.
(Hinweis) Bitte beachten Sie, dass es möglicherweise seltsame Teile gibt, da diese mit der Mitternachtsspannung m (_ _) m geschrieben sind
Da der Rückgabewert von hoge1 ~ 4 Function ist, können weitere Argumente übergeben werden.
//Nimmt Integer und gibt Integer zurück
Function<Integer, Integer> hoge1 = value -> value;
hoge1.apply(1); // return 1
//Nimmt Integer und gibt eine Funktion zurück, die Integer und Integer zurückgibt
Function<Integer, Function<Integer, Integer>> hoge2 = value -> (a -> value + a);
hoge2.apply(1).apply(2); // return 3
///Nimmt Integer, nimmt Integer, nimmt Integer und gibt eine Funktion zurück, die Integer zurückgibt
Function<Integer, Function<Integer, Function<Integer, Integer>>> hoge3 = value -> (a -> (b -> value + a + b));
hoge3.apply(1).apply(2).apply(4); // return 7
//Nimmt Integer, nimmt Integer, nimmt Integer, nimmt Integer und gibt eine Funktion zurück, die Integer zurückgibt
Function<Integer, Function<Integer, Function<Integer, Function<Integer, Integer>>>> hoge4 = value -> (a -> (b -> (c -> value + a + b + c)));
hoge4.apply(1).apply(2).apply(4).apply(8); // return 15
Da das Argument von hoge5 ~ 7 ein Abschluss ist, ist es notwendig, den Prozess im Voraus zu bestehen. (Hoge5 ~ 7 hat den Rückgabewert von hoge1 ~ 4 verwendet, da das Argument eine Funktion ist.)
//Nimmt Integer und gibt eine Funktion zurück, die Integer nimmt, nimmt Integer und nimmt Integer und gibt eine Funktion zurück, die Integer nimmt und Integer zurückgibt
Function<Function<Integer, Integer>, Function<Integer, Function<Integer, Function<Integer, Integer>>>> hoge5 = hoge -> (a -> (b -> (c -> hoge.apply(a + b + c))));
hoge5.apply(hoge1).apply(1).apply(2).apply(4); // return 7
hoge5.apply(hoge2.apply(1)).apply(2).apply(4).apply(8); // return 15
hoge5.apply(hoge3.apply(1).apply(2)).apply(4).apply(8).apply(16); // return 31
hoge5.apply(hoge4.apply(1).apply(2).apply(4)).apply(8).apply(16).apply(32); // return 63
//Nehmen Sie Integer und nehmen Sie eine Funktion, die Integer nimmt und Integer zurückgibt, nehmen Sie Integer und nehmen Sie Integer und geben Sie eine Funktion zurück, die Integer nimmt und Integer zurückgibt
Function<Function<Integer, Function<Integer, Integer>>, Function<Integer, Function<Integer, Function<Integer, Integer>>>> hoge6 = hoge -> (a -> (b -> (c -> hoge.apply(a).apply(b + c))));
hoge6.apply(hoge2).apply(1).apply(2).apply(4); // return 7
hoge6.apply(hoge3.apply(1)).apply(2).apply(4).apply(8); // return 15
hoge6.apply(hoge4.apply(1).apply(2)).apply(4).apply(8).apply(16); // return 31
//Nehmen Sie Integer und nehmen Sie Integer Nehmen Sie eine Funktion, die Integer nimmt und Integer zurückgibt, nehmen Sie Integer und nehmen Sie Integer und geben Sie eine Funktion zurück, die Integer nimmt und Integer zurückgibt
Function<Function<Integer, Function<Integer, Function<Integer, Integer>>>, Function<Integer, Function<Integer, Function<Integer, Integer>>>> hoge7 = hoge -> (a -> (b -> (c -> hoge.apply(a).apply(b).apply(c))));
hoge7.apply(hoge3).apply(1).apply(2).apply(4); // return 7
hoge7.apply(hoge4.apply(1)).apply(2).apply(4).apply(8); // return 15
Natürlich können Sie die Funktion, die der Rückgabewert ist, so wie sie ist haben. Ich übergebe eine Zahl, aber sie wird nicht berechnet
hoge7.apply(hoge3); // return Function
hoge7.apply(hoge3).apply(1); // return Function
hoge7.apply(hoge3).apply(1).apply(2); // return Function
Drehen Sie die Schleife und fügen Sie alles hinzu ... Wie Sie sehen können, wurde die Berechnung, die die for-Anweisung vor Java 8 verwendet hat! Es wird schläfrig ... w
int sum = IntStream.rangeClosed(1, 100).sum(); // return 5050
Nehmen Sie T und T und kehren Sie zurück T Nehmen Sie einen Verschluss, nehmen Sie T und nehmen Sie T und geben Sie T zurück (Bis morgen ... ww)
Drehen Sie die Schleife, um den Maximalwert zu erhalten (machen wir etwas mit der Stream-Verarbeitung ...)
Vielen Dank an diejenigen, die alles richtig gelesen haben. (Ich bin am Ende erschöpft, also mache ich es das nächste Mal wieder ...) Achten Sie darauf, den obigen Scheißcode nicht einzubetten, der für andere schwer in das eigentliche Produkt einzulesen ist.
Es ist schwer, sich an funktionale Programmierung zu gewöhnen, aber es macht Spaß, wenn man sie kennenlernt. Vorerst werde ich funktionale Programmierung mit Java machen und ein großartiges H-Buch lesen.
P.S Wo kann man einen Java-Lambda-Ausdruck am besten brechen ... (...?)
Recommended Posts