30 votes

Quand faites-vous un trait de soulignement devant une variable d'instance?

Duplicata possible:
Comment fonctionne un trait de soulignement devant une variable dans une classe d'objectif c de cacao?

J'ai vu cela chez Apple, dans UIPickerView.h:

 id<UIPickerViewDataSource> _dataSource;
 

pourquoi cela souligne-t-il? A-t-il une signification particulière? Une convention que je dois connaître?

34voto

Reed Copsey Points 315315

Beaucoup de gens l'utilisent pour les variables privées, pour faire la différence entre les variables privées et les variables publiques au sein d'un objet.

C'est une façon de travailler complètement facultative.

28voto

Ramin Points 10412

Ce que vous voyez est l'utilisation de souligne de distinguer entre les variables d'instance et les propriétés. Ainsi, une déclaration de classe pourrait être:

@interface Foo {
  NSString* _label;
  ....
}

@property (nonatomic, retain) NSString* label; // notice: no underline

Puis dans le fichier d'implémentation de vous aurait:

@synthesize label=_label; // the property is matched with the ivar

Maintenant, quand à l'intérieur de la mise en œuvre, si vous souhaitez accéder à la variable d'instance directement vous pouvez simplement utiliser _label mais de passer par la propriété des méthodes accesseurs (qui prennent soin de conserver/releases et un tas d'autres livre de maintien de tâches) vous utiliserez self.label. De l'extérieur, on aurait toujours envie de passer par l' {object}.label de la propriété.

L'autre façon est de le faire sans le trait de soulignement et il suffit d'utiliser:

NSString* label;
@property (nonatomic, retain) NSString* label;
...
@synthesize label;

Il fonctionne de la même, mais alors il pourrait confondre quelqu'un qui lit le code et essayer de garder une trace de l' label vs self.label. Personnellement, je trouve l'Apple convention (avec souligne) un peu plus facile à lire, mais c'est une question de préférence.

8voto

Serapth Points 4717

Comme certains l'ont déjà dit, _someVar était utilisé pour dire qu'une variable était privée. C'était une simple question de convention et n'a pas vraiment d'importance.

Une autre utilisation, faire un voyage dans la machine de retour en C a _function () représentait une fonction qui n'était pas portable de la plate-forme et __function () représentait une fonction qui n'était pas portable du compilateur. Ainsi, dans la bibliothèque C standard, vous verrez parfois une variable avec un _ ou __ devant le nom, c'est ce que ces fonctions représentent.

2voto

Spencer Ruport Points 24589

Il est parfois utilisé pour désigner des variables privées. Plus généralement, cela signifie simplement "cette variable est différente en quelque sorte".

2voto

kent Points 2151

se peut-il que ... (mémoire de jogging) ...

Je me souviens vaguement d'avoir lu un document ADC expliquant que Apple se réserve l'utilisation de variables membres avec préfixe de soulignement? et que les développeurs tiers sont découragés d'utiliser cette convention afin d'éviter les collisions?

| K <

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X