środa, czerwca 21, 2023

Nie znoszę programowania "funkcyjnego" :-)

Jedną z rzeczy, która mnie wkurza w kodzie który oglądam jest programowanie "funkcyjne" ;-)

O takie np:

var freq = new HashMap<Integer, Integer>();
list.forEach(i -> freq.put(i, freq.getOrDefault(i, 0)+1));

czyli niby jest funkcyjnie, ale jest side effect w postaci zmian na obiekcje spoza funkcji.

To szczególnie boli jak z takim podejściem przychodzi się do ohydnego Sparka... 

Bo jak zrobimy coś w ten deseń w Sparku:

HashMap<Integer, Integer> m = new HashMap<Integer, Integer>();
rdd.map(x -> m.put(x % 100, m.getOrDefault(x, 0) + 1));
System.out.println(m);

to wypisze nam {} ;-) bo my w 2 linii co najwyżej sugerujemy Sparkowi, by może taką operację wykonał, a on ją zrobi jeśli uzna za stosowne i co najważniejsze zrobi wtedy kiedy będzie trzeba...

Co lepsze jeśli to to m będzie za każdym wykonaniem inną mapą ;-) bo on sobie zrobi totalnie nową klasę dla funkcji i ją zserializuje i w niej będzie pole dla HashMap, ale jak rozumiem to pole nie będzie miało wartości z naszą HashMap'ą ;-)





Podobne postybeta
Nie lubię pseudofunkcyjnych wtrętów w kodzie ;-)
Nie lubię Sparka ;-)
Spisek ClassLoader'ów ;-)
Java 8 + lambdy = wolno ;-)
Zaczynam woleć Map nad Map ;-)

Brak komentarzy:

Prześlij komentarz