Re[8]: Монады
От: AlexRK  
Дата: 28.10.14 08:59
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Не стало, но код в итоге получается более предсказуемый. И до кучи получается неявный pattern matching


Да, наверное более предсказуемый, но все равно места для потенциальных ошибок остались (на ровном месте вводятся дополнительные переменные, которые не нужны).

Вот к примеру, если взять цикл "for (int i = 0; i < arr.Length; i++) { use(arr[i]; }" — здесь мы видим сразу 4 места, где можно ошибиться.
Путем замены цикла на "foreach (var item in arr) { use(item); }" мы ликвидируем все из них.

Или например, если мы это:
var
  val: Integer;
begin
  if condition then
    val = 3;
  else
    val = 5;
  use(val);
end


меняем на:
begin
  use(if condition then 3 else 5 end);
end


тоже преимущество видно и измеряемо: убрали лишнюю переменную.

А с монадами везде как-то шило на мыло получается. Я понимаю, что без монадных костылей функциональные языки не могут записать последовательность вызовов.
Но в императивном коде... Мне понравился пример jazzer'a про убирание цепочки if-ов, когда в языке нет исключений. Но опять же, ИМХО, такие вещи должны выглядеть на call-site без специальных нотаций и вообще без каких-то признаков наличия монад.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.