Jedną z rzeczy, która mnie wkurza w kodzie który oglądam jest programowanie "funkcyjne" ;-)
O takie np:
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:
rdd.map(x -> m.put(x % 100, m.getOrDefault(x, 0) + 1));
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
Brak komentarzy:
Prześlij komentarz