/ / Objective-C: utiliser _ (caractère de soulignement) pour nommer les variables [dupliquer] - objective-c, naming-conventions

Objective-C: utiliser _ (caractère de soulignement) pour nommer des variables [dupliquer] - objective-c, naming-conventions

Duplication possible:
Préfixe des noms de propriété avec un trait de soulignement dans Objective C

Dans le livre Objective-C, je lis et dans certains des codes que j'ai vus, il arrivait que des personnes ajoutent des tirets bas aux noms de variables.

Bien que je me rende compte que cela est dû à une convention établie, je me demande:

Y at-il une importance de savoir si le trait de soulignement précède ou complète le nom de la variable? Par exemple prendre _name, name and name_ En tant que programmeur Objective-C, qu’est-ce que le trait de soulignement signifie pour vous?

Réponses:

17 pour la réponse № 1

Cela dépend en grande partie du style personnel et de la programmation défensive. Mais voici la raison principale pour laquelle j’utilise personnellement et ai vu des personnes utiliser le préfixe.

Il s'agit de clarifier votre intention de savoir si vous accédez directement à ivar ou si vous utilisez le getter / setter.

Si j'ai:

@property (nonatomic, retain) NSArray *people;

et:

@synthesize people = _people;

Ceci compilera et produira les déclarations getter / setter comme ceci:

- (void)setPeople:(NSArray *)people;
- (NSArray *)people;

Maintenant, pour accéder directement à l'ivar je dois utiliser:

_people

Pour utiliser le getter / setter, je peux utiliser la notation par points ou le getter / setter comme:

[self people];
// or
self.people; // which compiles to [self people];

// and
[self setPeople:newPeople];
// or
self.people = newPeople; // which compiles to [self setPeople:newPeople];

Maintenant dans mon code si je tape accidentellement:

people = newPeople; // will not compile

il ne compilera pas car je n'utilise pas le getter / setter et il n'y a pas d'ivar appelé people CA devrait etre _people.


5 pour la réponse № 2

Un trait de soulignement unique est un code interne Apple.convention de codage, et ils le font de manière à ce que leurs symboles ne se heurtent pas au vôtre. Malheureusement, Apple a été négligent en ce qui concerne la publication d’exemples de code qui suivent cette habitude; bonne chose à faire.

Si vous souhaitez utiliser un préfixe sur vos noms ivar et de méthode, utilisez autre chose qu'un simple trait de soulignement.


3 pour la réponse № 3

Si vous utilisez de tels noms de variables, vous absolument ne devrait en utiliser aucune qui commence par un trait de soulignement suivi d'une lettre majuscule. La norme C réserve tous ces identifiants à toute utilisation (§7.1.3):

Tous les identificateurs commençant par un trait de soulignement et une lettre majuscule ou un autre trait de soulignement sont toujours réservés pour toute utilisation.

c'est à dire., une future révision du langage C (ou un compilateur donné) peut utiliser un tel identifiant en tant que mot-clé ou nom de fonction de bibliothèque, ce qui peut perturber votre programme. À la lumière de cela, je préfère simplement ne pas utiliser de noms préfixés par un soulignement; vous savez peut-être ne pas utiliser de majuscule après le trait de soulignement, mais cela n’empêche pas le nouveau type de venir le faire.

Aditionellement, tout les identificateurs commençant par un trait de soulignement sont réservés à la portée du fichier; un autre doit se méfier de.


1 pour la réponse № 4

Souligner ne veut pas dire grand chose, mais quand vous les utilisez, il est plus difficile de faire des erreurs comme celui-là, mais je n’ai jamais vu qui que ce soit utiliser des traits de soulignement à la fin, mais seulement au début. Je vous déconseille donc d’ajouter à la fin, car il est difficile de savoir ce que cela signifie.

Je n’ajoute pas vraiment de traits de soulignement à mon code Objective-C, mais c’est surtout une question de goût et non de sens. Assurez-vous simplement que vous n’ajoutez pas de tiret bas au milieu ou à la fin du nom :)


1 pour la réponse № 5

souligner signifie privé, je personnel ne l'utilise pasmy self ivars, puisque vous pouvez toujours utiliser @private et que vous pouvez ajouter ivar à l'extension d'interface dans le fichier .m ou même la section @implementaion de votre code, il est devenu courant depuis l'avènement de propriétés pour que vous puissiez l'utiliser. pour vous protéger de la forme accédant accidentellement à un ivar dans le code à la place de la propriété puisque le compilateur peut vous avertir de l'erreur, en programmation je vais souvent utiliser le premier score sous pour montrer qu'une fonction n'est pas autonome, elle doit être utilisée par une autre fonction et l'utilisera également en C ++ à partir d'ivar car C ++ n'aime pas les fonctions membres et ivars doit avoir le même nom.