Le point sur les conventions de noms de variables
muqaddar
Administrateur
Salut,
Je sais qu'on en a déjà parlé, mais j'aimerai bien qu'on en reparle ! ;-)
Comment nommez vous vos variables ? Comment les écrivez-vous ? Qu'est ce qu'Apple recommande ? Je sais qua chaque programmeur a ses préférences, mais qu'en est-il de la "théorie". C'est parfois utile, surtout quand on travaille à plusieurs sur un projet.
Exemples :
Variables d'instance : NSArray *_jobsArray;
Variables de méthode : NSArray *jobsArray;
Je sais plus à quoi sert celui là : NSArray *__jobsArray;
Sinon, vous le mettez où le pointeur ?
Comme ça : NSArray* jobsArray;
Ou comme ça : NSArray *jobsArray;
D'autre part, écrivez vous le type de variable dans la variable.
Donc sur un array :
NSArray *jobsArray;
Ou sur un dico :
NSDictionary* jobsDico;
Ou vous vous contentez de mettre : NSArray *jobs;
Pour ma part, j'aime bien savoir dès que je vois une variable à quel type d'objet j'ai à faire.
A vous.
Je sais qu'on en a déjà parlé, mais j'aimerai bien qu'on en reparle ! ;-)
Comment nommez vous vos variables ? Comment les écrivez-vous ? Qu'est ce qu'Apple recommande ? Je sais qua chaque programmeur a ses préférences, mais qu'en est-il de la "théorie". C'est parfois utile, surtout quand on travaille à plusieurs sur un projet.
Exemples :
Variables d'instance : NSArray *_jobsArray;
Variables de méthode : NSArray *jobsArray;
Je sais plus à quoi sert celui là : NSArray *__jobsArray;
Sinon, vous le mettez où le pointeur ?
Comme ça : NSArray* jobsArray;
Ou comme ça : NSArray *jobsArray;
D'autre part, écrivez vous le type de variable dans la variable.
Donc sur un array :
NSArray *jobsArray;
Ou sur un dico :
NSDictionary* jobsDico;
Ou vous vous contentez de mettre : NSArray *jobs;
Pour ma part, j'aime bien savoir dès que je vois une variable à quel type d'objet j'ai à faire.
A vous.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Les seules "conventions" que j'utilise :
- les variables d'instance commencent par _
- les variables de classe commencent par __ (2 underscores)
- les constantes (#define) sont en majuscule
J'ai aussi l'habitude de préfixer mes outlets par _IBO_ et les actions par _IBA_.
Pour la position de * pour les pointeurs, je suis plutôt de la secte des coleurs d'étoile au nom de la variable ([tt]void *unPointeur).[/tt]
Le reste, c'est plutôt au pif.
.
Pour les array, dico et set, je me contente du s à la fin.
Complément: rattacher le symbole du pointeur à la variable permet de rester cohérent si on déclare plusieurs variables d'un meme type sur une ligne (NSObject *obj1, *obj2;).
Oui, surtout que l'étoile qualifie le nom de la variable, et non son type.
Par exemple :
char* c1, c2;
Dans cette déclaration, c1 sera bien un pointeur sur un caractère, mais c2 sera un caracère !
Donc c'est plus joli d'écrire :
char *c1, c2;
.
Je suis d'accord avec vous.
Question, ce que vous appelez variables de classe, c'est ce que j'ai appelé variable de méthode ?
D'accord, mais Bru, tu ne mets rien devant tes variables de méthode donc ?
mort de rire... ;-)
Pour les pointeurs j'utilise char *c. Je n'aime pas la formulation char* c que je trouve peu explicite. Quand aux noms, suivant l'humeur du jour, la hauteur de neige ou la longueur des bouchons sur la voie expresse, j'utilise soit des "_" soit des majuscules de séparation: lagentDuBoutDuPont ou bien lagent_du_bout_du_pont.
- variables : minuscule pour la première lettre (et une majuscule que pour chaque lettre de début de mot, sauf donc le 1er), genre listOfCars
- variables d'instances : j'essaye de respecter la règle de mettre un "_" au début, mais bon il m'arrive de zapper
- variables de classes : assez rarement eu à le faire, mais le "__" est une bonne habitude aussi
- #define en toutes majuscule
- autres constantes : commencent par k, genre kLocked
Pour les "*", je les met personnellement accolées au type, mais j'avoue que du coup ça me "pose problème" lorsque je fais des déclarations multiples sur une ligne.
Mais en général même si des fois ça serait plus concis, j'essaye de toute façon de ne déclarer qu'une variable par ligne. Surtout que ça permet de commenter chaque variable individuellement derrière
Pour le type inclut dans le nom de variable, ça dépend si c'est assez clair ou pas, ça j'ai pas de règle stricte. En général je ne précise rien, sauf si c'est plutôt ambigu.
Par contre pour les Outlets je met plus facilement le type abbrégé dans le nom comme pathField pour un NSTextField, okBtn pour un NSButton...
Déjà , je rattache toujours le pointeur à la variable, ca évite à confusion.
-Variables d'instance : Commencent par une minuscule. Le underscore est à réserver pour les variables privées. J'écris le type de la variable dans la variable pour les objets collection et de l'AppKit, ainsi dans le code on voit tout de suite à quel type d'objet on a affaire.
Ex.:[tt]
IBOutlet NSSearchField *clientsSearchField;
IBOutlet NSPopUpButton *modeListeClientsPopUpButton;
NSMutableArray *clientsArray;
[/tt]
-Variables de classe : Commencent par deux underscore puis une minuscule, mais j'en utilise trés trés rarement.
Voilà , sinon les Apple codings guidelines sont ici.
"Variable privée" : ça n'a aucun sens en Objective-C, ou plus généralement en POO.
Une variable d'instance est toujours privée, car c'est la justification même de la programmation objet (où les données sont sensées être toujours "opaques").
D'ailleurs, par défaut, les variables d'instance sont en Obj-C @protected, ce qui fait qu'elles ne sont directement accessibles qu'à la classe elle-même et à ses sous-classes.
Le @public est, de mon point de vue, une hérésie en POO.
Par contre, je te rejoins sur le fait de préfixer les méthodes privées par _. D'autant plus qu'Apple ne se gène pas pour le faire.
.
Tout à fait Bru, je suis d'accord avec toi sur ce point là , et ce n'est pas moi qui irait le contredire, mais les diverses choses que j'ai lues sur le sujet font pourtant état de variables d'instances privées et de conventions associées, surtout en rapport avec les APIs Apple en faites afin d'éviter les conflits de noms.
Les guidelines Apple :
Et voici ce que raconte le Livre Cocoa Programming. Je met l'intégralité du paragraphe que je trouve trés intéressant et qui explique bien les conventions :
Je vais opérer de cette façon maintenant. Histoire d'être homogène entre toutes mes classes.
- Concernant le préfixe : je ne l'utilise pas à l'intérieur d'une classe (variables d'instance), par contre, comme la plupart d'entre vous j'imagine, je préfixe mes noms de classes par un préfixe relatif à mon pseudo. C'est utile pour éviter les conflits si on passe nos classes à d'autres ensuite
Certains utilisent leurs initiales en majuscules, genre JBFace pour une classe Face créée par Jean Bonneau. Moi j'utilise le préfixe "ALI" (parfois "Ali").