Classement des fonctions ou méthodes

jeudi 19 janvier 2006 :: perrick :: PHP :: 9 commentaires :: aucun trackback

Quand j'écris une nouvelle fonction (ou une nouvelle méthode), je la mets systématiquement en haut de mon fichier (ou de ma classe). C'était devenu systématique.

Et le travail en binôme vient remettre en question cette pratique : le rélexe ne fait pas encore partie de la norme de codage. La question se reformule ainsi : quel est l'endroit le plus pratique pour l'ajout d'une nouvelle fonction ? Nous sommes arrivés à trois possibilités : en haut, en bas ou alors classé alphabétiquement.

  • en haut permet d'avoir la dernière fonction modifiée quand on ouvre le fichier.
  • en bas permet de donner un côté plus littéraire au code source.
  • classé alphabétiquement permet de retrouver la fonction (si on se souvient bien de son nom). Peut-être un peu redondant étant donné que cette vue est très facile à obtenir avec un éditeur moderne (avec Outline dans Eclipse par exemple).

Sur openTIME, nous avons opté pour en haut. Mais il y a sûrement d'autres pistes et d'autres arguments : des idées ?

Vos commentaires et/ou trackbacks

Le jeudi 19 janvier 2006 à 19:15, commentaire par JMF :: site :: #

Pour ma part, je scinde mes propriétés et mes méthodes de classes en 3 parties selon leur portée (privée, protégée, publique) et par ordre alphabétique à l'intérieur d'une portée.

Sinon, je ne vois pas trop l'intérêt d'avoir la dernière méthode en haut. Comme tu le rappelles, la plupart des éditeurs permettent d'aller directement à la méthode que tu veux.

Le seul intérêt de mettre la dernière en haut serait précisément de savoir qu'elle est la dernière mais cela n'est utile que si l'on suppose que l'on va plus souvent à la dernière ajoutée qu'à une autre. Or, j'en doute.

Le jeudi 19 janvier 2006 à 19:29, commentaire par perrick :: site :: #

JMF > L'avantage que j'y trouve ce n'est pas tant de "savoir qu'elle est la dernière", mais plutôt d'être dessus dès qu'on ouvre le fichier dans son éditeur.

Le jeudi 19 janvier 2006 à 19:39, commentaire par acemtp :: site :: #

Interessante question! Je n'ai jamais réelement reflechis à où je mettais mes nouvelles fonctions. C'est soit de facon aléatoire, soit pres d'une autre fonction similaire. Par exemple les accessors se retrouvent ensemble. J'ai souvent des classes contenant les fonctions init() update() render() release() donc elles se retrouvent ensemble et dans le meme ordre.

Le problème que je vois de mettre systématiquement les fonctions au debut ou à la fin du source est lors de merge, apres que 2 personnes aient chacune ajoutées une nouvelle fonction, un conflit aura lieu à tous les coups. Le meilleur moyen d'éviter ca est que chaque programmeur place ses fonctions à une position prédéterminée, paul en haut, pierre en bas et jacques au milieu mais ca n'est pas genial :)

J'imagine que le fait que nous les placons dans un ordre qui est proche de l'aléatoire rend les conflits rares dans ce genre de situation.

Le vendredi 20 janvier 2006 à 00:06, commentaire par LaurentJ :: site :: #

>en haut permet d'avoir la dernière fonction modifiée quand on ouvre le fichier.

Parce que ton éditeur n'est pas moderne ;-) ? Avec Kate, quand j'ouvre un fichier, il positionne le curseur là où je l'avais laissé en le fermant la dernière fois.

Sinon, moi je ne classe pas par ordre alphabétique (j'y ai même jamais pensé).

Je les classe en général d'abord par interface (dans le cas d'un objet implémentant plusieurs interfaces), puis par domaine fonctionnel, donc en fonction des données sur lesquelles elles travaillent. Ainsi je sais par exemple que vers la fin du fichier, ce sont toutes les méthodes qui concernent l'interface Stock et en particulier, qui travaillent sur les listes de produits.

L'avantage de regrouper les méthodes par domaine fonctionnel, évite de faire des allers-retours trop important dans le code source. Toutes les méthodes, qu'elles soient publiques ou privées, sont regroupées selon leurs interactions entre elles..

Bon mais l'organisation peut dépendre aussi de l'importance de la classe, de ce qu'elle fait...

Le vendredi 20 janvier 2006 à 09:30, commentaire par perrick :: site :: #

Une autre piste encore : comment la communauté SmallTalk voit son propre code

www.notarianni.org/index....

Le vendredi 20 janvier 2006 à 11:38, commentaire par mere-teresa :: site :: #

En haut, ce n'est pas une mauvaise idée, on peut ainsi voir l'évolution du fichier.
En utilisant Eclipse, tu peux relier une sorte de navigateur à ton code, qui te permet de voir tes fonctions, classes, méthodes, etc. classées selon plusieurs critères.

Le lundi 23 janvier 2006 à 09:02, commentaire par Greg :: site :: #

J'ai tendance à grouper mes fonctions par leur "sujet".
Admettons que j'ai une bibliothèque de fonctions dans un fichier qui me permet de gérer des lignes et des tableaux, je grouperais mes fonctions comme ceci :
- Récupérer une ligne
- Enregistrer une nouvelle ligne
- Modifier une ligne
- ...
- Récupérer un tableau
- Enregistrer un nouveau tableau
- Modifier l'élément d'un tableau
- ...

Ce n'est peut être pas ce qu'il y a de mieux, mais sur mes brouettes de travail, je ne suis pas encore passé aux éditeurs évolués. Un bon éditeur texte me suffit bien souvent.

Le lundi 23 janvier 2006 à 11:21, commentaire par JMF :: site :: #

Perrick> L'avantage que j'y trouve ce n'est pas tant de "savoir qu'elle est la dernière", mais plutôt d'être dessus dès qu'on ouvre le fichier dans son éditeur.

Pour ma part, je trouve que la perte de logique ne vaux pas le gain de quelques secondes (et encore uniquement dans le cas où l'ont veux accéder à la dernière méthode sur laquelle on a travailler).

Le mardi 28 mars 2006 à 15:07, commentaire par Vlad :: site :: #

De mon côté je préfère ordonner les méthodes selon leurs objectifs : getters, setters, manipulation base, traitement, etc... Dans chaque section, les nouvelles méthodes sont ajoutées en bas des anciennes.

Ajouter un commentaire

Les commentaires pour ce billet sont fermés.