Functioneel PHP Framework
Ik heb geprobeerd alles zo puur functioneel mogelijk gehouden. Dus:
Geen veranderende variabelen!
Elke assignment had ook weggelaten kunnen worden, maar is toegevoegd voor de leesbaarheid of omdat PHP er anders niet mee om kan gaan, bijv. $array[2]($arg). De view() functie is niet puur functioneel. Ik heb geen idee hoe ik dat anders zou kunnen doen.
Ik heb daarnaast alleen maar de ternary operator gebruikt, geen ifs en elses, omdat ik het idee/de illusie heb dat dat meer overeenkomt met functionele talen.
Ik ben ook maar een noob met functioneel programmeren, dus alle suggesties zijn welkom :).
Gebruik:
Code (php)
https://gist.github.com/2478668
Gewijzigd op 24/04/2012 12:41:36 door Pim -
Code (php)
En het leukste is.. de daadwerkelijke code wordt pas uitgevoerd in de reduce-stap, waar via een lusje alle elementen worden afgegaan. Alle tussenliggende stappen plakken gewoon iterators om iterators heen. Als je alleen de eerste 10 elementen nodig hebt, worden er maar 10 elementen door die hele reeks van iterators getrokken (gegeven dat filter niets weggooit ;))
Sterker nog, ik had ergens een BufferingIterator, daar kon je een query in stoppen en die haalde dan in stappen van 30 resultaten uit de database. Als je dan maar 50 resultaten nodig had haalde hij maximaal 60 dingen uit de database. Pagination, geheel transparant zeg maar :)
Oftewel: functioneel programmeren is machtig mooi. PHP is er niet helemaal ideaal voor, maar het kan prima.
Heb je verder nog inhoudelijke opmerkingen op het frameworkje?
Gewijzigd op 24/04/2012 13:33:37 door Pim -
Al eens gekeken naar Silex?
Kees Schepers op 25/04/2012 12:54:47:
Al eens gekeken naar Silex?
Die naam heb ik eerder voorbij zien komen...!
http://www.phphulp.nl/php/forum/topic/di-goed-op-weg/84211/#599508
Silex heeft toch niet zo veel met functioneel programmeren van doen?
https://gist.github.com/2498047
Als je eens serieus naar functioneel programmeren wil kijken, probeer eens wat met Haskell. Er zijn hele mooie tutorials om erin te komen en eens in een echt functionele taal hebben geprogrammeerd geeft je allemaal nieuwe ideeën die je ook in je imperatieve en object-georiënteerde projecten kan gebruiken.
Ik heb niet echt een framework, het zijn meer wat hulpmiddeltjes, classes en functies die in PHP zelf missen. (curry bijvoorbeeld, en str_concat!) Er is niet echt documentatie, ik heb ze gewoon geschreven omdat ik ze op dat moment "nodig" had: Als je eens serieus naar functioneel programmeren wil kijken, probeer eens wat met Haskell. Er zijn hele mooie tutorials om erin te komen en eens in een echt functionele taal hebben geprogrammeerd geeft je allemaal nieuwe ideeën die je ook in je imperatieve en object-georiënteerde projecten kan gebruiken.
Nou, Silex lijkt wel erg veel op jouw voorbeeldje Pim, en ook die van Jelmer :)
Ja heb ik kreeg toevallig ook dit idee terwijl ik bezig was in 'Learning Haskell for Great Good' ;).
@Kees,
Ja, de interface lijkt erop, maar de werking is wel ietsjes anders, niet?
Ik vind je Haskell-style maybe heerlijk ;)