JeuWeb - Crée ton jeu par navigateur
Classe ou fonction ? - 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 : Classe ou fonction ? (/showthread.php?tid=7603)

Pages : 1 2


Classe ou fonction ? - Youndaiime - 10-03-2016

J'ai une petite interrogations de base à vous demander ^^.
Comment faites vous lors de vos développement, pour vous dire : "Tiens je vais créer une classe, ça sera plus pratique".
Plutôt que de jouer avec des fonctions directement. Notamment en Js ou je trouve que les Objets et Classes ne sont pas tellement bien gérer.
Enfaite la vrai question, pourquoi des classes plutôt que des fonctions ou inversement.
C'est plus lisible ? Plus pratique ? Plus performant ?
Ca peut paraitre stupide comme question, peut être que je cerne pas tout a fait ce qu'est une classe aussi. Enfin bon ^^ Merci


RE: Classe ou fonction ? - Xenos - 10-03-2016

L'avantage d'une classe sur une fonction ou une méthode statique est la possibilité de la passer en paramètre, et de lui attribuer un contexte (propriétés de la classe), ce qui permet de séparer l'instanciation et l'utilisation: la classe qui utilise l'objet n'a aucune idée de son "état" réel (ie: ça peut être une classe fille, un mock, ou peu importe).

La syntaxe des "classes" en JS est assez exotique, en effet, mais dans ce cas, le plus simple est de créer un objet {...} et de mettre des fonctions dans ses "attributs". L'absence d'héritage oblige juste à faire uniquement de la composition (et l'absence de typage des paramètres rend le tout délicat).


RE: Classe ou fonction ? - niahoo - 10-03-2016

Il y a un héritage en Javascript. En php et javascript, tu peux passer des fonctions en paramètre.

Une classe c'est quand tu as besoin d'objets : plusieurs instances d'un même type de données sur lesquelles peuvent s'appliquer plusieurs fonctions (les méthodes).

Une fonction décrit simplement des données cibles à partir de données sources.


RE: Classe ou fonction ? - Xenos - 10-03-2016

"tu peux passer des fonctions en paramètre"
Mais pas un contexte Wink

{Et oui, c'est vrai qu'on peut faire de l'héritage JS via le prototype}


RE: Classe ou fonction ? - niahoo - 11-03-2016

Si, avec des fermetures lexicales (closures).


RE: Classe ou fonction ? - Youndaiime - 11-03-2016

Merci pour vos réponses.


RE: Classe ou fonction ? - Xenos - 11-03-2016

Les closures PHP ne sont pas des classes justement?


RE: Classe ou fonction ? - niahoo - 11-03-2016

Elles sont implémentées avec des classes en PHP, oui. En javascript non. Quoi qu'il en soit, lorsque tu codes en PHP tu n'écris pas de classe quand tu écris une fonction anonyme avec des closures.

Donc non, cela n'a rien à voir, hormis un détail d'implémentation du au fait que PHP est peu dynamique.

(edit: je trouve ce petit jeu assez mesquin. Si ça te gêne tant d'avoir dit une connerie, lis plus de doc et ouvres-toi à plus de langages ; inutile de chercher la petite bête : écrire une fonction et une classe ce n'est pas la même chose, mais ça sert le même but).


RE: Classe ou fonction ? - Xenos - 11-03-2016

Ok, oui, c'est une connerie dans les langages en général, je suis juste un peu trop plongé dans PHP en ce moment (ton lien SO est intéressant en tous cas).


RE: Classe ou fonction ? - Argorate - 12-03-2016

Dans un vrai langage OO, tu ne fais pas de fonction, ça règle la question ^^

Le JavaScript ne gère pas "mal les classes". Tu n'as pas compris le JS... C'est un langage de prototype, pas OO...
C'est comme reprocher à une cuillère de ne pas faire tournevis, bin oui ce n’est pas fait pour...
Sinon en JS et de surcroit en coffeescript, les classes marchent très bien, avec héritage et tout (c'est même beaucoup plus simple et on peut même avoir l'héritage multiple), donc en plus de ça, ta phrase est juste fausse^^

Sinon, pour la question initiale, j'ai l'impression qu'elle revient à demander "c'est quoi l’intérêt de la POO", car si tu n'as pas compris à quoi sert une classe, c'est qu'il faut tout reprendre depuis le début^^ Les autres ont déjà donné des débuts de réponses à ce propos.
En gros une classe sert d'une part à ranger le code, et d'autres parts à jouer avec des instances, qui ont des propriétés + méthodes associés.

En résumé:

une fonction c'est une boite noire avec des données en entrés/sorties, alors qu'une classe c'est bien plus que ça : c'est un méta-constructeur d'objet qui ont des propriétés propres et plusieurs "fonction" associés, qui lui définissent un comportement.