De onde vem a expressão idiomática “flatmap that s ***” no Scala?

O que é tão poderoso sobre flatmap que merece tal lugar no folclore de Scala?

O raciocínio por trás dessa frase é que você pode replace um monte de tedioso código if / then / else que você escreveria com chamadas para flatMap (e outras funções de ordem superior).

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

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

Imagine a situação em que você tem uma coleção para a qual deseja aplicar uma function (ou uma série de funções) em que cada function pode retornar null. Quando você realmente usa o código nulo, você estará cheio de verificações nulas. Mas se você usar Opções em vez de valores, você pode simplesmente mapear os valores com as funções desejadas, encadeando as funções no caso de múltiplas funções e obter uma coleção apenas com 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, os conselhos mais curtos “apenas simplifique essa merda” se estabeleceram.

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

 option match { case Some ... 

Em que ponto o outro disse: “O que é isso? Hora amadora? Mapa plano que merda!”

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

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

A coisa crucial sobre o flatMap é que é a representação de Scala da operação de binding monádica. Existem inúmeros tutoriais na web explicando o propósito das mônadas e por que exatamente elas são tão úteis; James Iry tem um que entra em detalhes.

Runar Bjarnason é a pessoa que você está procurando pela origem.

Perceber porque é tão poderoso é algo que só pode acontecer com o tempo para ser honesto. A class Option é o melhor lugar para começar a ver como você iria repetidamente flatMap uma série de pesquisas (por exemplo) em um resultado final.