2011-12-19 7 views

Respuesta

43

El razonamiento detrás de esta frase es que puede reemplazar un montón de código tedioso si/entonces/otro que escribiría con llamadas a flatMap (y otras funciones de orden superior).

Esto es especialmente cierto para las opciones (ver http://tonymorris.github.io/blog/posts/scalaoption-cheat-sheet/)

Pero se aplica a otras mónadas también (aunque tengo que admitir que no entiendo exactamente los detalles todavía yo)

imaginar el situación en la que tiene una colección para la cual desea aplicar una función (o una serie de funciones) donde cada función puede devolver nulo. Cuando realmente usa null, su código estará plagado de comprobaciones nulas. Pero si usa Opciones en lugar de valores, puede simplemente asignar un mapa plano de los valores con las funciones deseadas, encadenando las funciones en el caso de múltiples funciones y obtener una colección con solo los resultados que no son nulos, que en muchos casos es exactamente lo que usted quiere.

Dado que esa descripción es bastante intrincada, se estableció el consejo más breve "just flatmap that shit".

+0

Yo personalmente uso la lista de mónadas a veces para tratar con combinaciones. –

9

Runar Bjarnason es la persona que está buscando para el origen.

Darse cuenta de por qué es tan poderoso es algo que solo puede venir con el tiempo para ser honesto. La clase Opción es el mejor lugar para comenzar y ver cómo se planificaría una serie de búsquedas planas repetidas veces (por ejemplo) en un resultado final.

11

Lo crucial de flatMap es que es la representación de Scala de la operación de enlace monádico. Existen numerosos tutoriales en la web que explican el propósito de las mónadas y por qué son tan útiles; James Iry has one que entra en detalle.

+3

Creo que esta es la respuesta correcta, 'Option' es solo uno de los muchos casos de uso de' flatMap'. Por supuesto, si desea observar las mónadas en su "hábitat natural", debe consultar a Haskell. La única diferencia es que Haskellers dice: "¡Solo >> = esa mierda!" – Landei

+0

Gracias por el enlace al artículo, lo encontré muy útil. También volví al capítulo "For expressions revisited" en Programming in Scala, que arroja algo de luz sobre los bucles y su uso de filter, map, flatMap y flatten. –

92

La historia que oí fue que dos programadores Scala preeminentes fueron emparejamiento cuando uno de ellos comenzó a escribir algo de código como esto:??

option match { 
    case Some ... 

momento en el que el otro dijo "¿Qué es esta hora Amateur mapa plano esa mierda! "

En cuanto a lo que es tan poderoso sobre flatMap, bueno ... Primero, es el operador monádico fundamental. Eso significa que es una operación común compartida, por ejemplo, por contenedores (como Option, colecciones, etc.), continuaciones, estado, etc. En segundo lugar, aunque puede deconstruir Option, eso, a diferencia de flatMap, no es una operación monádica, por lo que no puede ser tan ampliamente aplicada. Además, requiere demasiado conocimiento sobre los datos que está manipulando.

. Nota: previamente he dicho juego fue más lento que flatMap - es todo lo contrario como una cuestión de hecho, hasta la versión más reciente de Scala en el momento de escribir estas líneas, 2.10.1)

+3

Supongo que todavía estoy en la hora de los aficionados, entonces :-) –

+54

Esos dos programadores fuimos Paul Chiusano y yo. – Apocalisp

+0

@Apocalisp Eso es lo que pensé, pero no quería atribuirle este error a nadie. –

Cuestiones relacionadas