GateKeaper schreef op dinsdag 10 april 2012 @ 17:22:
Ondanks dat iets als
knockout er best wel mooi uitziet, blijf ik altijd mijn twijfels houden over de toepasbaarheid. Ik bedoel... mogen we javascript ondersteuning tegenwoordig eisen? En dit veranderd toch de hele structuur van je applicatie?! Misschien is het er ook wel niet voor bedoeld, maar ik kan mij gewoon niet voorstellen dat een normale website met een dergelijk framework moet worden opgebouwd.
Waarom niet? Grootste voorbeeld van deze toepassing (client-side rendering etc) is Twitter. De grootste voordelen:
* Minder / geen server-side template rendering; eenvoudiger serversoftware, minder werk voor de nodes in je gigantische cluster, etc.
* één API, meerdere clients (web, mobiel, alle twitter apps ooit geschreven). Niet triviaal in deze tijd.
ZpAz schreef op dinsdag 10 april 2012 @ 19:15:
Obj-C blocks
C:
1
2
3
| [self.playlistsManager fetchPlaylistsWithCallback:^(NSMutableArray *fetchedPlaylists) {
NSLog(@"The return of the playlist %@", fetchedPlaylists);
}]; |
Kan ook wel in andere talen.. maar toch.

Maakt multithreading toch wat fijner.
Ja... en nee

. Er zijn twee zaken waar je moet om denken: Het wordt best wel lelijke / onoverzichtelijke code als je een methode aanroept die 2 of meer van die blocks verwacht en je daar een lap code onder hangt, en je zit met de block scope (of wat de term maar is). Stel je hebt view controller X, die opent view controller Y met een callback die iets in controller X aanroept - zo van laat de gebruiker wat selecteren, kom dan terug. Als het systeem aangeeft dat 'ie te weinig geheugen heeft, wordt controller/view X opgeruimd. Als de gebruiker zijn actie dan doet in Y, wordt de callback aangeroepen... en is die waarde niet meer beschikbaar.
iig, __block voor variabelen die je in je blocks gebruikt pleuren. Is iets dat je makkelijk vergeet.
Het alternatief / de ouderwetse manier is dmv selectors - je geeft aan een functie die je aanroept welke functie op welk object je aan wilt roepen als callback. Is iets uitgebreider, maar het is qua leesbaarheid (mogelijk) iets beter, en je kunt de callbackfunctie unittesten. Niet dat dat zoveel gebeurt in objective-c, overigens

.
En scala - of talen met first class functions in het algemeen > alles
Scala:
1
2
3
| playlistManager fetchPlaylists(fetchedPlaylists => println("The return of the playlist %s".format(fetchedPlaylists))
// of korterder
playlistManager fetchPlaylists(println("The return of the playlist %s".format(_)) |
@ het PHP verhaal, het is niet de schuld van de taal / het framework (alhoewel dat natuurlijk voor verbetering vatbaar is), maar van het leger aan brakke devs die maar wat aanprutsen

.