Cet article a également été publié dans J'ai écrit une fonction d'ordre supérieur en langage Go et joué avec. Ceci est un hommage à .com / _makanai / items / ca313c8e117da78154fa). Ce n'est rien de plus qu'amusant (comme dans l'article original), donc si vous recherchez une implémentation utile, le retour du navigateur est recommandé.
(Remarque) Veuillez noter qu'il peut y avoir des parties étranges car il est écrit avec une tension de minuit m (_ _) m
Puisque la valeur de retour de hoge1 ~ 4 est Function, plus d'arguments peuvent être passés.
//Prend Integer et renvoie Integer
Function<Integer, Integer> hoge1 = value -> value;
hoge1.apply(1); // return 1
//Prend Integer et renvoie une fonction qui prend Integer et renvoie Integer
Function<Integer, Function<Integer, Integer>> hoge2 = value -> (a -> value + a);
hoge2.apply(1).apply(2); // return 3
///Prend Integer, prend Integer, prend Integer et renvoie une fonction qui renvoie Integer
Function<Integer, Function<Integer, Function<Integer, Integer>>> hoge3 = value -> (a -> (b -> value + a + b));
hoge3.apply(1).apply(2).apply(4); // return 7
//Prend Integer, prend Integer, prend Integer, prend Integer et renvoie une fonction qui renvoie Integer
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
Puisque l'argument de hoge5 ~ 7 est une clôture, il est nécessaire de passer le processus à l'avance. (Hoge5 ~ 7 a utilisé la valeur de retour de hoge1 ~ 4 car l'argument est une fonction)
//Prend Integer et renvoie une fonction qui prend Integer, prend Integer et prend Integer et renvoie une fonction qui prend Integer et renvoie Integer
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
//Prenez Integer et prenez une fonction qui prend Integer et retourne Integer, prenez Integer et prenez Integer et retournez une fonction qui prend Integer et renvoie Integer
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
//Prenez Integer, prenez Integer, prenez Integer et retournez Integer, prenez Integer, prenez Integer, prenez Integer et renvoyez Integer.
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
Bien sûr, vous pouvez avoir la fonction qui est la valeur de retour telle quelle. Je passe un nombre, mais ce n'est pas vraiment calculé
hoge7.apply(hoge3); // return Function
hoge7.apply(hoge3).apply(1); // return Function
hoge7.apply(hoge3).apply(1).apply(2); // return Function
Tournez la boucle et ajoutez tout ... Comme vous pouvez le voir, le calcul qui utilisait l'instruction for avant Java 8! Ça devient somnolent ... w
int sum = IntStream.rangeClosed(1, 100).sum(); // return 5050
Prenez T et T et retournez T Prenez une fermeture, prenez T et prenez T et retournez T (A demain ... ww)
Tournez la boucle pour obtenir la valeur maximale (faisons quelque chose avec le traitement du flux ...)
Merci à ceux qui ont tout lu correctement. (Je suis épuisé à la fin, donc je le referai la prochaine fois ...) Veillez à ne pas intégrer le code de merde ci-dessus qui est difficile à lire pour les autres dans le produit réel.
Il est difficile de s'habituer à la programmation fonctionnelle, mais c'est amusant quand on apprend à la connaître. Pour le moment, je vais faire de la programmation fonctionnelle avec Java et lire un excellent livre H.
P.S Où est le meilleur endroit pour casser une expression lambda Java ... (...?)
Recommended Posts