- 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;
}
1024-- 23.11.2015 20:21 # 0
Локальная переменная-счётчик или переменная аккумулятор - проста и естественна, чистые функции красивы, полезны и легко тестируются. Срать во все переменные - плохо, протаскивать контекст через аргументы, города и страны - непосильный труд. Выбрав и скомбинировав разумные, полезные и достаточно производительные принципы, мы доберёмся до вершин!
bormand 23.11.2015 20:41 # 0
CHayT 24.11.2015 10:23 # 0
даже IO могла бы быть иммутабельной, если бы хватало памяти на хранение всего мира
кстати, были эзотерические языки, где RealWorld не был запрятан под монадический интерфейс, но поскольку память всё-таки не бесконечна, там придумываются другие ограничения
bormand 24.11.2015 17:26 # 0
Strannik1941 23.11.2015 21:02 # +1
3_14dar 23.11.2015 21:03 # 0
Strannik1941 23.11.2015 21:10 # +1
P.S. Python старше чем C#
3_14dar 23.11.2015 21:58 # 0
А что не так с типиацией в плане ФП?
Strannik1941 23.11.2015 22:23 # 0
3_14dar 23.11.2015 22:57 # 0
>не знаю, как сейчас в C#, ибо уже давно на нём не писал (последней раз пользовался версией, как она только вышла 4.0)
>Начиная с версии Visual C# 3.0 локальные переменные могут иметь неявный тип var.
Strannik1941 23.11.2015 23:16 # 0
Вот небольшой пример на ocaml
let rec sum xs =
match xs with
| [] -> 0
| x :: xs' -> x + sum xs';;
val sum : int list -> int = <fun>
Т.е интерпретатор сам определил, что аргумент - список, а результат целое число.
guest 24.11.2015 00:14 # +3
kegdan 24.11.2015 06:12 # +4
roman-kashitsyn 24.11.2015 11:22 # 0
Нифига, там функторов нет. Окамловые модули и функторы - это одна из основных фич языка, очень крутая штука, которая в теории мощнее TypeClasses (без расширений), но на практике чуть менее удобная в использовании.
С другой стороны, F# умеет в перегрузку операторов, многопоточность и (пока ещё) непереносимый виндовый гуй.
kegdan 24.11.2015 12:12 # 0
roman-kashitsyn 24.11.2015 11:29 # +2
> локальных переменных это не так полезно, как автовывод типа аргументов
Давно на Ocaml пишешь? Мануал по монадам вчера прочитал?
В любой программе объёмнее школьной поделки будут модули, где модули - там .mli -файлы с интерфейсами, в которых типы всех публичных функций извольте выписать руками. Haskell-компилятор по дефолту имеет ворнинг на top-level биндинги без явного указания типа.
Как раз для локальных переменных и функций вывод типов полезнее, т.к. для top-level функций модуля типы всё равно всегда лучше явно писать.
kegdan 24.11.2015 06:10 # +1
Ты что, глорихантер от программирования?
bormand 24.11.2015 06:16 # 0
Это как?
kegdan 24.11.2015 06:18 # 0
А пидар видимо фапает только на те языки, что нынче популярны
bormand 24.11.2015 07:41 # +1
kegdan 24.11.2015 09:05 # 0
3_14dar 25.11.2015 04:12 # −2
Vasiliy 25.11.2015 09:51 # −1
PureChaos 25.11.2015 12:58 # 0
1024-- 24.11.2015 10:43 # 0
CHayT 24.11.2015 10:45 # +2
1024-- 24.11.2015 10:54 # 0
(разумеется, в случае, когда язык используют не потому, что он всплыл, а потому, что нравится)
Vasiliy 24.11.2015 07:54 # 0
imihajlov 24.11.2015 10:24 # +2
3_14dar 25.11.2015 04:13 # −4
Fike 24.11.2015 00:41 # 0
как главный местный питонопохабник осмелюсь оспорить
Stallman 23.11.2015 21:15 # 0
inkanus-gray 23.11.2015 23:18 # 0