JeuWeb - Crée ton jeu par navigateur
[CoffeeScript] Destructuration d'arguments - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [CoffeeScript] Destructuration d'arguments (/showthread.php?tid=6930)



[CoffeeScript] Destructuration d'arguments - Sephi-Chan - 14-09-2013

Je viens de découvrir un petit truc sympa avec CoffeeScript (dans le sens où c'est un peu documenté, mais pas dans cette utilisation).


newGameSearchSubmitted = (itemView, { view, model: gameSearch }) ->
format = App.request('get_formats').get(event.target.elements.format_id.value)
gameSearch.set(format: format)

Qui compile en :


newGameSearchSubmitted = function(itemView, _arg) {
var format, gameSearch, view;
view = _arg.view, gameSearch = _arg.model;
format = App.request('get_formats').get(event.target.elements.format_id.value);
return gameSearch.set({
format: format
});
};

Le truc sympa, c'est de pouvoir capter ce qu'on veut dans les arguments reçus. Ici, ma fonction prend 2 arguments : un premier qu'on dans la variable itemView et un deuxième qui est un objet et donc on veut récupérer seulement certaines clés. Grâce à la syntaxe { view, model: gameSearch }, on va récupérer la clé view dans une variable view, et la clé model dans la variable gameSearch.

C'est très pratique quand on sait ce qu'on reçoit !


Et on peut faire le même genre de choses avec des tableaux :


doSomething = ([ first, second, others... ]) ->
# Le nommage est explicite mais :
# first contient le premier élément du tableau.
# second contient le… deuxième élément du tableau (undefined s'il n'y en a pas).
# others contient un tableau des autres éléments (un tableau vide s'il n'y en a pas).
# Bien sûr, si on ne veut que le premier élément on met [ first ].


doSomething = ([ first, others..., last ]) ->
# Là aussi, le nommage est explicite.


Voilà, ça sert pas tous les jours, mais c'est sympa !


RE: [CoffeeScript] Destructuration d'arguments - Maks - 14-09-2013

J'utilise la technique pour les callbacks de socket, pratique ouep

Pas documenté dans ce sens sinon ouais, j'ai découvert le trick y'a quelques mois sur un blog (si jamais je retrouve le lien...)

Ah et aussi :


newGameSearchSubmitted = (itemView, { view, model: gameSearch }) ->
format = App.request('get_formats').get(event.target.elements.format_id.value)
gameSearch.set({format})

Bien plus sympa Smile


RE: [CoffeeScript] Destructuration d'arguments - Sephi-Chan - 14-09-2013

En fait c'est cette version là qui est documentée et que j'ai essayé à tout hasard dans les arguments. ^^ Je l'utilise de temps en temps.