it-swarm-pt.tech

De onde vem a expressão idiomática "flatmap that s ***" em Scala?

O que há de tão poderoso no mapa plano que merece tal lugar no folclore Scala?

101
Guillaume Belrose

O raciocínio por trás dessa frase é que você pode substituir muitos códigos tediosos se/then/else que você escreveria por chamadas para flatMap (e outras funções de ordem superior).

Isso é especialmente verdadeiro para Opções (consulte http://tonymorris.github.io/blog/posts/scalaoption-cheat-sheet/ )

Mas isso também se aplica a outras mônadas (embora eu deva admitir, ainda não entendi exatamente os detalhes)

Imagine a situação em que você tem uma coleção para a qual deseja aplicar uma função (ou uma série de funções) em que cada função pode retornar nula. Quando você realmente usa nulo, o código será repleto de verificações nulas. Mas se você usar Opções em vez de valores, poderá simplesmente mapear os valores com as funções desejadas, encadear as funções no caso de várias funções e obter uma coleção com apenas os resultados que não são nulos, o que em muitos casos é exatamente o que você quer.

Uma vez que essa descrição é bastante complicada, o conselho mais curto "apenas mapa plano dessa merda" se estabeleceu.

54
Jens Schauder

A história que ouvi foi que dois programadores proeminentes Scala estavam emparelhando quando um deles começou a escrever um código como este:

option match {
    case Some ...

Nesse momento, o outro disse: "O que é isso? Hora amadora? Mapa plano que merda!"

Quanto ao que há de tão poderoso em flatMap, bem ... Primeiro, é o operador monádico fundamental. Isso significa que é uma operação comum compartilhada por, por exemplo, contêineres (como Option, coleções, etc), continuações, estado, etc. Segundo, enquanto você pode desconstruir um Option , que, ao contrário de flatMap, não é uma operação monádica, portanto, não pode ser tão amplamente aplicada. Além disso, requer muito conhecimento sobre os dados que você está manipulando.

Nota: eu disse anteriormente que a correspondência era mais lenta que flatMap - o oposto é verdade, até a versão mais recente de Scala no momento da redação deste documento, 2.10.1.)

102
Daniel C. Sobral

O ponto crucial sobre flatMap é que é a representação de Scala da operação de ligação monádica. Existem inúmeros tutoriais na Web explicando o objetivo das mônadas e por que exatamente elas são tão úteis; James Iry tem um que entra em alguns detalhes.

12
Submonoid

Runar Bjarnason é a pessoa que você procura pela Origem.

Perceber por que é tão poderoso é algo que só pode vir com tempo para ser honesto. A classe Option é o melhor lugar para começar, para ver como você planaria repetidamenteMapa de uma série de pesquisas (por exemplo) em um resultado final.

9
Sean Parsons