Convenção de nomenclatura para projetos de código aberto iOS / OSX


12

Nem sempre, mas na maioria das vezes, você encontrará projetos de código aberto para iOS ou Mac OS X com nomes começando pelas letras iniciais do nome e sobrenome do autor. Se um projeto fosse de autoria de Nick Leblanc, o projeto seria lido como NLMyProject.

Exemplos:

Onde é que isso veio? Uma pessoa escreveu dessa maneira primeiro e depois todo mundo seguiu?

Não consegui encontrar nada sobre isso, mesmo nas Diretrizes da Apple . Esse idioma está escrito em algum lugar?


1
Boa pergunta e exemplos legais de código aberto! ;-)
Leo Natan 15/10

Respostas:


16

O objetivo C, como C, não possui espaços para nome. Isso significa que se alguém já definiu uma função fooou classe Bar, ela deve ser globalmente única e você não pode defini-la. Isso pode resultar em muitas dores de cabeça quando você tem seu código e depois adiciona outra biblioteca e, de repente, as coisas acontecem em lugares estranhos.

Não é uma diretriz apresentada pela Apple para este na programação com Objective C: Convenções seção da biblioteca desenvolvedor iOS:

Alguns nomes devem ser exclusivos em seu aplicativo

Cada vez que você cria um novo tipo, símbolo ou identificador, considere primeiro o escopo em que o nome deve ser exclusivo. Às vezes, esse escopo pode ser o aplicativo inteiro, incluindo suas estruturas vinculadas; Às vezes, o escopo é limitado apenas a uma classe anexa ou mesmo a um bloco de código.

Os nomes de classe devem ser exclusivos em todo o aplicativo

As classes Objective-C devem ser nomeadas exclusivamente, não apenas no código que você está escrevendo em um projeto, mas também em todas as estruturas ou pacotes configuráveis ​​que você pode estar incluindo. Como exemplo, você deve evitar o uso de nomes genéricos de classe como ViewController ou TextParser, pois é possível que uma estrutura que você inclua no seu aplicativo não consiga seguir as convenções e criar classes com os mesmos nomes.

Para manter os nomes das classes exclusivos, a convenção é usar prefixos em todas as classes. Você notou que os nomes das classes Cocoa e Cocoa Touch geralmente começam com NS ou UI. Prefixos de duas letras como esses são reservados pela Apple para uso em classes de estrutura. À medida que aprende mais sobre o Cocoa e o Cocoa Touch, você encontrará vários outros prefixos relacionados a estruturas específicas:

...

Suas próprias classes devem usar três prefixos de letras. Isso pode estar relacionado a uma combinação do nome da sua empresa e do seu aplicativo, ou mesmo a um componente específico dentro do seu aplicativo. Como exemplo, se sua empresa se chamava Whispering Oak e você estava desenvolvendo um jogo chamado Zebra Surprise, você pode escolher WZS ou WOZ como prefixo de sua classe.

Portanto, as bibliotecas mencionadas por você quebram essa convenção, mas ficam no coração do problema da falta de espaço para nome no objetivo C.

Leitura adicional
Namespacing por NSHipster
Qual é a melhor maneira de resolver uma colisão de espaço para nome Objective-C?
Como se usa namespaces no código objetivo-c do iOS?


Soa como Objective-C realmente precisa namespaces ...
Chris Cirefice

1
@ChrisCirefice seria muito bom, mas a coisa a se perceber é que o Objetivo C é uma camada fina em cima de C. Tentar introduzir espaços de nome provavelmente é mais difícil do que parece sem quebrar as coisas. Escavando Por que o Objective-C não tem namespaces? Encontrei Clang Developers - Adicionando namespaces ao Objective-C . Lembre-se, @é usado porque não é usado em C ... tentar adicionar outro operador que não quebra outras coisas é um desafio.

1
Os namespaces do @ChrisCirefice não resolvem nada. Conflitos de prefixo apenas se tornam conflitos de namespace.
Route de milhas

@MichaelT O objetivo C não é uma camada fina em cima de C há um tempo (objetivo C 2.0). Agora, a Apple mudou o foco para Swift, que inclui recursos mais modernos, tais como namespaces, mas atualmente não possui outras características de C. Objetivo
Leo Natan
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.