Hallo,
gesamt = produkte.map( getPreis ).reduce( sum );
In prozeduraler Schreibweise sähe das so aus:
gesamt = reduce( map( produkte, getPreis ), sum );
Für alle nicht Hardcore-Funktionale-Programmierung-Gurus, ist die erste Variante denke ich einfacherer zu lesen.
Man sollte noch einmal prozedural und funktional unterscheiden. Das obige Beispiel ist eher funktional, da Werte und Funktionen im Vordergrund stehen. Funktionen bilden Werte auf andere Werte ab und geben diese i.d.R. ohne Nebeneffekte zurück. Das kann soweit gehen, dass Datenstrukturen unveränderbar sind und jede Operation einen neuen Wert erzeugt.
Funktionale Programmierung ist in vielen multiparadigmatischen Sprachen möglich, darunter auch JavaScript. Lodash hatte ich als Beispiel schon genannt. Verwirrend ist das höchstens bei dynamisch typisierten Sprachen, weil nicht klar ist, für welche Typen Funktionen definiert sind und was die Typen der Rückgabewerte sind. Dass map eine Liste mit n Elementen auf eine Liste mit n Elementen abbildet, muss man in der objektorientierten wie bei der funktionalen Schreibweise wissen.
Jedenfalls ist die PHP-Standard-Library nicht funktional, sondern größtenteils prozedural, weil sie die Eingabewerte oft »destruktiv« ändert. Und die eingebauten PHP-Funktionen sind keine First-Class-Objects. Im »Userspace« gibt es immerhin mittlerweile Closures. Siehe auch functional-php.
Mathias