Convention de dénomination pour les projets open source iOS / OSX

12

Pas toujours mais la plupart du temps, vous trouverez des projets open source iOS ou Mac OS X avec des noms commençant par les lettres initiales du prénom et du nom de l'auteur. Si un projet devait être écrit par Nick Leblanc, le projet serait lu comme NLMyProject.

Exemples:

D'où cela vient-il? Une personne l'a-t-elle écrit de cette façon d'abord, puis tous les autres ont suivi?

Je n'ai rien trouvé à ce sujet, même dans les directives Apple . Cet idiome est-il écrit quelque part?

Stéphane Bruckert
la source
1
Belle question et des exemples open source sympas! ;-)
Leo Natan

Réponses:

16

L'objectif C, comme C, n'a pas d'espaces de noms. Cela signifie que si quelqu'un a déjà défini une fonction fooou une classe Bar, celle-ci doit être globalement unique et vous ne pouvez pas la définir. Cela peut entraîner beaucoup de maux de tête lorsque vous avez votre code, puis ajoutez une autre bibliothèque et soudain, les choses se brisent dans des endroits étranges.

Il existe une directive présentée par Apple pour cela dans la section Programmation avec Objective C: Conventions de la bibliothèque de développeur iOS:

Certains noms doivent être uniques sur votre application

Chaque fois que vous créez un nouveau type, symbole ou identificateur, vous devez d'abord considérer la portée dans laquelle le nom doit être unique. Parfois, cette portée peut être l'ensemble de l'application, y compris ses cadres liés; parfois la portée est limitée uniquement à une classe englobante ou même à un bloc de code.

Les noms de classe doivent être uniques sur toute une application

Les classes Objective-C doivent être nommées de manière unique non seulement dans le code que vous écrivez dans un projet, mais également dans tous les frameworks ou bundles que vous pourriez inclure. Par exemple, vous devez éviter d'utiliser des noms de classe génériques comme ViewController ou TextParser car il est possible qu'un framework que vous incluez dans votre application ne respecte pas les conventions et ne crée pas de classes avec les mêmes noms.

Afin de garder les noms de classe uniques, la convention consiste à utiliser des préfixes sur toutes les classes. Vous aurez remarqué que les noms de classe Cocoa et Cocoa Touch commencent généralement par NS ou UI. Des préfixes à deux lettres comme ceux-ci sont réservés par Apple pour une utilisation dans les classes de framework. Au fur et à mesure que vous en apprendrez plus sur Cocoa et Cocoa Touch, vous rencontrerez une variété d'autres préfixes liés à des cadres spécifiques:

...

Vos propres classes doivent utiliser des préfixes à trois lettres. Ceux-ci peuvent être liés à une combinaison du nom de votre entreprise et du nom de votre application, ou même à un composant spécifique de votre application. Par exemple, si votre entreprise s'appelait Whispering Oak et que vous développiez un jeu appelé Zebra Surprise, vous pourriez choisir WZS ou WOZ comme préfixe de classe.

Donc, les bibliothèques que vous mentionnez enfreignent en quelque sorte cette convention, mais sont au cœur du problème du manque d'espaces de noms au sein de l'objectif C.

Autres lectures d'
espaces de noms par NSHipster
Quelle est la meilleure façon de résoudre une collision d'espace de noms Objective-C?
Comment utilise-t-on les espaces de noms dans le code objective-c iOS?

Communauté
la source
On dirait qu'Objective-C a vraiment besoin d'espaces de noms ...
Chris Cirefice
1
@ChrisCirefice ce serait vraiment sympa, mais la chose à réaliser est que l'Objectif C est une fine couche au-dessus de C. Essayer d'introduire des espaces de noms là-bas est probablement plus difficile qu'il n'y paraît sans casser les choses. Creuser Pourquoi Objective-C n'a-t-il pas d'espaces de noms? J'ai trouvé Clang Developers - Ajout d'espaces de noms à Objective-C . Rappelez-vous, @est utilisé parce qu'il n'est pas utilisé en C ... essayer d'ajouter un autre opérateur qui ne casse pas d'autres choses est difficile.
1
Les espaces de noms @ChrisCirefice ne résolvent rien. Les conflits de préfixes deviennent simplement des conflits d'espace de noms.
Miles Rout
@MichaelT Objective C n'a pas été une couche mince au-dessus de C depuis un certain temps (Objective C 2.0). Apple a maintenant déplacé l'attention sur Swift, qui comprend des fonctionnalités plus modernes, telles que les espaces de noms, mais il manque actuellement d'autres fonctionnalités d'Objectif C.
Leo Natan