Откуда берется идиоматическое выражение "flatmap that s ***" в Scala? - PullRequest
99 голосов
/ 19 декабря 2011

Что такого сильного в плоской карте, что она заслуживает такого места в фольклоре Скала?

Ответы [ 4 ]

103 голосов
/ 19 декабря 2011

История, которую я услышал, состояла в том, что два выдающихся программиста Scala соединялись, когда один из них начал писать некоторый код, подобный этому:

option match {
    case Some ...

В этот момент другой сказал: «Что это? Любительский час? Плоская карта, это дерьмо!»

Что касается того, что так мощно в flatMap, хорошо ... Во-первых, это фундаментальный монадический оператор. Это означает, что это обычная операция, используемая, например, контейнерами (такими как Option, коллекции и т. Д.), Продолжениями, состоянием и т. Д. Во-вторых, в то время как вы можете де-конструировать Option, в отличие от flatMap, не является монадической операцией, поэтому ее нельзя применять так широко. Кроме того, требуется слишком много знаний о данных, которыми вы манипулируете.

Примечание: ранее я говорил, что сопоставление было медленнее, чем flatMap - на самом деле все верно, вплоть до самой последней версии Scala на момент написания этой статьи, 2.10.1.)

54 голосов
/ 19 декабря 2011

Смысл этой фразы в том, что вы можете заменить много утомительного кода if / then / else, который вы пишете, вызовами flatMap (и других функций более высокого порядка).

Это особенно верно для опций (см. http://tonymorris.github.io/blog/posts/scalaoption-cheat-sheet/)

Но это касается и других монад (хотя, должен признать, я пока не совсем понимаю детали)

Представьте себе ситуацию, когда у вас есть коллекция, для которой вы хотите применить функцию (или серию функций), где каждая функция может возвращать ноль. Когда вы на самом деле используете null, ваш код будет пронизан проверками null. Но если вы используете Options вместо значений, вы можете просто отобразить значения с нужными функциями, объединить функции в цепочку для нескольких функций и получить коллекцию с только ненулевыми результатами, что во многих случаях является именно тем, что ты хочешь.

Поскольку это описание довольно запутанное, утвердился более короткий совет "просто плоская карта, которая дерьмо".

12 голосов
/ 19 декабря 2011

Ключевым моментом в flatMap является то, что это Scala-представление операции монадического связывания.В Интернете есть множество учебных пособий, объясняющих назначение монад и почему именно они так полезны; У Джеймса Ири есть один , который входит в некоторые детали.

9 голосов
/ 19 декабря 2011

Рунар Бьярнасон - это человек, которого вы ищете для происхождения.

Понимание того, почему оно такое мощное, может произойти только со временем, если честно.Класс Option - это лучшее место для начала, чтобы увидеть, как вы бы неоднократно отображали серию поисков (например) в конечный результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...