Hakuna matata!
(Die Dinger heißen auf deutsch Nebenwirkungen oder Nebeneffekte. Seiteneffekte sind eine falsche 1:1-Übertragung des englischen side effects.)
Ah, das klingt in meinen Ohren auch gleich viel besser.
Das Javascript-forEach() hatte ich im Sinn. Du meintest vermutlich nicht 99% map/reduce sondern 99% funktionale Herangehenswiese, egal welche Funktionen dabei konkret zum Einsatz kommen. Da bin ich dann auch einigermaßen bei dir.
Ja, das meine ich. Es fällt mir einigermaßen schwer .forEach() als funktional zu bezeichnen, es ist immerhin eine Prozedur. Aber zu Map/Reduce gehört sie auch nicht wirklich. Zumindest ist jetzt geklärt, worauf ich hinaus möchte.
Zudem ist 'var_dump' stringly-typed (kein Tippfehler). Du wolltest doch ordentliches Programmieren propagieren. Um beim Beispiel zu bleiben:
array_walk($array, function ($element) {
var_dump($element);
});
>
> Syntax gehört ausgeschrieben und nicht in Strings versteckt.
Das ist eine Sünde von PHP. In besseren Programmiersprachen sind Funktionen über ihre Bezeichner referenzierbar. Dann muss man nicht auf Strings ausweichen und muss auch keinen Closure drumherum stricken.
> Wo ist nun aber bei PHP der Vorteil von array\_walk() gegenüber foreach?
Bei array\_walk() weiß ich sofort, dass das Array iteriert wird, um die Nebenwirkungen der Callback-Funktion auszulösen. Das kann ich festellen selbst ohne einen Blick in die Callback-Funktion zu werfen. Wenn ich mir dagegen nur den Schleifenkopf einer foreach-Schleife anschaue, dann kann ich nicht sagen, ob die Schleife für Nebenwirkungen, Zuordnungen oder zum Aggregrieren gebraucht wird. Um das sagen zu können, muss ich erst einen Blick auf den Körper der Schleife werfen. Deshalb finde array\_walk() expressiver als die foreach-Schleife.
Zum anderen passt array\_walk() besser zu meinem Programmierstil und hilft mir dabei konsistenteren Code zu schreiben, das ist eher ein persönliches Argument, aber jeder Programmierer sollte darum bemüht sein konsistenten Code zu schreiben.
> (Benchmark-Vergleiche interessieren mich auch nicht, die Unterschiede gehen bei den üblichen Datenmengen im Grundrauschen auf.)
Benchmarks interessieren mich auch nicht, im Übrigen glaube ich, dass array\_walk() schlechter abschneiden dürfte als die for-Schleife.
--
“All right, then, I'll go to hell.” – Huck Finn