Ce qui est si puissant sur flatmap qu’il mérite un tel endroit dans le folklore de la Scala ?
Réponses
Trop de publicités?L'histoire que j'ai entendu était que deux prééminent Scala programmeurs ont été couplage lorsque l'un d'eux a commencé à écrire du code comme ceci:
option match {
case Some ...
À quel point l'autre dit "qu'est-Ce que cela? Amateur à l'heure? Plat de la carte que de la merde!"
Pour ce qui est tellement puissant sur flatMap
, eh bien... tout d'Abord, il est fondamental monadique de l'opérateur. Cela signifie que c'est une opération courante partagée, par exemple, les conteneurs (comme Option
, collections, etc), les continuations, état, etc. Deuxièmement, alors que vous pouvez construire un Option
,, contrairement aux flatMap
, n'est pas un monadique de l'opération, de sorte qu'il ne peut pas être plus largement appliquée. Aussi, il ne nécessite pas trop de connaissances sur les données que vous manipulez.
Note: auparavant, j'ai dit d'appariement a été plus lent que l' flatMap
-- le contraire est vrai aussi d'une question de fait, jusqu'à la version la plus récente de la Scala au moment d'écrire ces lignes, la version 2.10.1.)
Le raisonnement derrière cette phrase est que vous pouvez remplacer un grand nombre de fastidieux if/then/else code, vous écrivez avec des appels à flatMap (et d'autres des fonctions d'ordre supérieur).
Cela est particulièrement vrai pour les Options (voir http://tonymorris.github.io/blog/posts/scalaoption-cheat-sheet/)
Mais elle s'applique à d'autres monades (même si je dois admettre, je n'ai pas de comprendre exactement les détails encore moi-même)
Imaginez la situation où vous avez une collection pour laquelle vous souhaitez appliquer une fonction (ou d'une série de fonctions) où chaque fonction peut retourner null. Lorsque vous utilisez réellement null vous code sera criblé de nulle contrôles. Mais si vous utilisez les Options au lieu de valeurs, vous pouvez simplement flatmap les valeurs avec les fonctions souhaitées, enchaînant les fonctions dans le cas de plusieurs fonctions et d'obtenir une collection avec seulement les résultats qui ne sont pas null, ce qui dans de nombreux cas est exactement ce que vous voulez.
Depuis que la description est plutôt alambiqué la plus courte des conseils "juste flatmap que de la merde".
L’essentiel sur la `` est que c’est la représentation de la Scala de l’opération de liaison monadique. Il existe de nombreux tutoriels sur le web expliquant le but de monades et pourquoi exactement ils sont si utiles ; James Iry a un à http://james-iry.blogspot.com/2007/09/monads-are-elephants-part-1.html qui va dans le détail.
Runar Bjarnason est la personne que vous recherchez pour l’origine.
Se rendant compte de pourquoi il est si puissant, c’est quelque chose qui ne peut venir que de temps pour être honnête. La classe Option est le meilleur endroit pour commencer pour voir comment vous le feriez à plusieurs reprises flatMap une série de recherches (par exemple) dans un résultat final.