- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
public function calculateSum($products) {
$sum = 0.0;
array_map(function($product) use (&$sum)
{
$sum += $product->hasSale() ? $product->getPriceWithSale() : $product->getPrice();
}, $products);
return $sum;
}
Локальная переменная-счётчик или переменная аккумулятор - проста и естественна, чистые функции красивы, полезны и легко тестируются. Срать во все переменные - плохо, протаскивать контекст через аргументы, города и страны - непосильный труд. Выбрав и скомбинировав разумные, полезные и достаточно производительные принципы, мы доберёмся до вершин!
даже IO могла бы быть иммутабельной, если бы хватало памяти на хранение всего мира
кстати, были эзотерические языки, где RealWorld не был запрятан под монадический интерфейс, но поскольку память всё-таки не бесконечна, там придумываются другие ограничения
P.S. Python старше чем C#
А что не так с типиацией в плане ФП?
>не знаю, как сейчас в C#, ибо уже давно на нём не писал (последней раз пользовался версией, как она только вышла 4.0)
>Начиная с версии Visual C# 3.0 локальные переменные могут иметь неявный тип var.
Вот небольшой пример на ocaml
let rec sum xs =
match xs with
| [] -> 0
| x :: xs' -> x + sum xs';;
val sum : int list -> int = <fun>
Т.е интерпретатор сам определил, что аргумент - список, а результат целое число.
Нифига, там функторов нет. Окамловые модули и функторы - это одна из основных фич языка, очень крутая штука, которая в теории мощнее TypeClasses (без расширений), но на практике чуть менее удобная в использовании.
С другой стороны, F# умеет в перегрузку операторов, многопоточность и (пока ещё) непереносимый виндовый гуй.
> локальных переменных это не так полезно, как автовывод типа аргументов
Давно на Ocaml пишешь? Мануал по монадам вчера прочитал?
В любой программе объёмнее школьной поделки будут модули, где модули - там .mli -файлы с интерфейсами, в которых типы всех публичных функций извольте выписать руками. Haskell-компилятор по дефолту имеет ворнинг на top-level биндинги без явного указания типа.
Как раз для локальных переменных и функций вывод типов полезнее, т.к. для top-level функций модуля типы всё равно всегда лучше явно писать.
Ты что, глорихантер от программирования?
Это как?
А пидар видимо фапает только на те языки, что нынче популярны
(разумеется, в случае, когда язык используют не потому, что он всплыл, а потому, что нравится)
как главный местный питонопохабник осмелюсь оспорить