/ / Objective-C: usando _ (underscores) em variáveis ​​de nomenclatura [duplicado] - objective-c, convenções de nomenclatura

Objective-C: usando _ (underscores) em variáveis ​​de nomenclatura [duplicado] - objective-c, convenções de nomenclatura

Duplicar Possível:
Prefixando nomes de propriedades com um sublinhado no Objective C

No livro Objective-C estou lendo e em alguns dos códigos vi, às vezes, as pessoas adicionam sublinhados aos nomes das variáveis.

Enquanto eu percebo que isso é devido a uma convenção estabelecida, eu me pergunto:

Existe algum significado se o sublinhado precede ou completa o nome da variável? Por exemplo, pegue _name, name and name_ Como programador Objective-C, o que se faz alguma coisa significa sublinhado para você?

Respostas:

17 para resposta № 1

Isso se deve em grande parte ao estilo pessoal e à programação defensiva. Mas aqui está a principal razão pela qual eu pessoalmente uso e vi pessoas usarem o prefixo.

Tem a ver com tornar sua intenção mais clara sobre se você está acessando o ivar diretamente ou usando o getter / setter.

Se eu tiver:

@property (nonatomic, retain) NSArray *people;

e:

@synthesize people = _people;

Isto irá compilar e produzir as declarações getter / setter assim:

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

Agora para acessar diretamente o ivar eu preciso usar:

_people

Para usar o getter / setter eu posso usar notação de ponto ou o getter / setter como:

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

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

Agora no meu código, se eu acidentalmente apenas digitar:

people = newPeople; // will not compile

não irá compilar porque eu não estou usando o getter / setter e não há nenhum ivar chamado people deveria ser _people.


5 para resposta № 2

Um único sublinhado principal é um interno da Applecodificação convenção, e eles fazem isso para que seus símbolos não colidir com o seu. Infelizmente, a Apple tem sido desleixada sobre a publicação de exemplos de código que seguem este hábito, por isso muitas pessoas fora da Apple têm a idéia de que é um coisa boa a fazer.

Se você quiser usar um prefixo em seus nomes de métodos e ivar, use nada além de um único sublinhado à esquerda.


3 para resposta № 3

Se você usar esses nomes de variáveis, definitivamente não deve usar nenhum que comece com um sublinhado seguido por uma letra maiúscula. O padrão C reserva todos esses identificadores para qualquer uso (§7.1.3):

Todos os identificadores que começam com um sublinhado e uma letra maiúscula ou outro sublinhado são sempre reservados para qualquer uso.

isto é, uma revisão futura da linguagem C (ou de um determinado compilador) pode usar qualquer identificador como um nome de função de biblioteca ou palavra-chave, o que pode quebrar seu programa. Em vista disso, prefiro simplesmente não usar nomes prefixados por um sublinhado; você pode saber não usar letras maiúsculas após o sublinhado, mas isso não impede o novo cara de vir e fazê-lo.

Além disso, todos identificadores que começam com um sublinhado são reservados no escopo do arquivo; outra pegadinha para tomar cuidado.


1 para resposta № 4

Sublinhado realmente não significa nada, mas quando você usá-los, é mais difícil cometer erros como este, mas eu nunca vi ninguém usando sublinhados no final, apenas no início e aconselho você a não adicionar no final, pois pode não ser claro o que essas coisas significam.

Eu realmente não adiciono sublinhados ao meu código Objective-C, mas é principalmente uma questão de gosto e não significado. Apenas certifique-se de não adicionar sublinhados no meio ou no final dos nomes :)


1 para resposta № 5

sublinhado significa privado, pessoal eu não usá-lomeus self ivars, já que você sempre pode usar @private e você pode adicionar ivar à extensão de interface no arquivo .m ou até mesmo na seção @implementaion do seu código, ele se tornou comum recentemente com o advento das propriedades para que você possa usá-lo Para proteger-se forma acidentalmente acessar um ivar no código em vez da propriedade desde que o compilador pode dizer-lhe do erro, na programação eu vou usar o líder sob pontuação para mostrar que uma função não é auto-contido, para ser usado por outra função e também irá usá-lo em C ++ de ivar porque C + + não gosta de um membro funções e ivars para ter o mesmo nome.