Convenzione di denominazione per progetti open source iOS / OSX


12

Non sempre ma la maggior parte delle volte, troverai progetti open source iOS o Mac OS X con nomi che iniziano con le lettere iniziali dell'autore nome e cognome. Se un progetto dovesse essere scritto da Nick Leblanc, il progetto verrebbe letto come NLMyProject.

Esempi:

Da dove viene? Una persona l'ha scritto prima in questo modo e poi tutti gli altri hanno seguito?

Non sono riuscito a trovare nulla al riguardo, nemmeno nelle Linee guida Apple . Quel linguaggio è scritto da qualche parte?


1
Bella domanda e fantastici esempi open source! ;-)
Leo Natan,

Risposte:


16

L'obiettivo C, come C, non ha spazi dei nomi. Ciò significa che se qualcuno ha già definito una funzione fooo una classe Bar, deve essere univoca a livello globale e non è possibile definirla. Ciò può causare molti mal di testa quando si dispone del codice e quindi aggiungere un'altra libreria e improvvisamente le cose si rompono in posti strani.

V'è una linea guida presentata da Apple per questo nella Programmazione con Objective C: Convenzioni sezione della biblioteca sviluppatore iOS:

Alcuni nomi devono essere univoci in tutta l'app

Ogni volta che crei un nuovo tipo, simbolo o identificatore, dovresti prima considerare l'ambito in cui il nome deve essere univoco. A volte questo ambito potrebbe essere l'intera applicazione, inclusi i relativi framework collegati; a volte l'ambito è limitato solo a una classe chiusa o anche solo a un blocco di codice.

I nomi delle classi devono essere univoci in un'intera app

Le classi Objective-C devono essere nominate in modo univoco non solo all'interno del codice che stai scrivendo in un progetto, ma anche in tutti i framework o bundle che potresti includere. Ad esempio, dovresti evitare di usare nomi di classi generici come ViewController o TextParser perché è possibile che un framework che includi nella tua app non riesca a seguire le convenzioni e a creare classi con gli stessi nomi.

Per mantenere univoci i nomi delle classi, la convenzione prevede l'utilizzo di prefissi su tutte le classi. Avrai notato che i nomi delle classi Cocoa e Cocoa Touch in genere iniziano con NS o UI. Prefissi di due lettere come questi sono riservati da Apple per l'uso in classi di framework. Man mano che impari di più su Cocoa e Cocoa Touch, incontrerai una varietà di altri prefissi relativi a quadri specifici:

...

Le tue classi dovrebbero usare tre prefissi di lettere. Questi potrebbero essere correlati a una combinazione del nome della tua azienda e del nome della tua app, o anche a un componente specifico all'interno della tua app. Ad esempio, se la tua azienda si chiamasse Whispering Oak e stavi sviluppando un gioco chiamato Zebra Surprise, potresti scegliere WZS o WOZ come prefisso di classe.

Quindi, le biblioteche che menzionate in qualche modo infrangono questa convenzione, ma sono al centro del problema della mancanza di spaziatura all'interno dell'obiettivo C.

Ulteriore lettura dello
spazio dei nomi di NSHipster
Qual è il modo migliore per risolvere una collisione dello spazio dei nomi Objective-C?
Come si usano gli spazi dei nomi nel codice iOS-c di iOS?


Sembra che Objective-C abbia davvero bisogno di spazi dei nomi ...
Chris Cirefice,

1
@ChrisCirefice sarebbe davvero bello, ma la cosa da capire è che l'Obiettivo C è uno strato sottile sopra C. Cercare di introdurre spazi dei nomi è probabilmente più difficile di quanto sembri senza rompere le cose. Scavare in Perché Objective-C non ha spazi dei nomi? Ho trovato Clang Developers - Aggiunta di spazi dei nomi a Objective-C . Ricorda, @è usato perché non è usato in C ... provare ad aggiungere un altro operatore che non rompe altre cose è una sfida.

1
@ChrisCirefice I namespace non risolvono nulla. Gli scontri con prefisso diventano semplicemente scontri con lo spazio dei nomi.
Miles Rout,

@MichaelT Obiettivo C per un po 'non è stato uno strato sottile sopra C (Obiettivo C 2.0). Ora Apple ha spostato l'attenzione su Swift, che include funzionalità più moderne, come gli spazi dei nomi, ma al momento manca di altre funzionalità dell'Obiettivo C.
Leo Natan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.