Откуда берутся "плоская карта, что s ***", идиоматическое выражение в Scala?

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

Ответ 1

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

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

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

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

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

Ответ 2

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

option match {
    case Some ...

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

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

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

Ответ 3

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

Ответ 4

Runar Bjarnason - это человек, которого вы ищете для происхождения.

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