Convención de nomenclatura para proyectos de código abierto iOS / OSX

12

No siempre, pero la mayoría de las veces, encontrará proyectos de código abierto para iOS o Mac OS X con nombres que comienzan con las letras iniciales del autor, nombres y apellidos. Si un proyecto fuera creado por Nick Leblanc, el proyecto se leería como NLMyProject.

Ejemplos:

De donde viene eso? ¿Una persona lo escribió de esta manera primero y luego todos los demás lo siguieron?

No pude encontrar nada al respecto, incluso en las Pautas de Apple . ¿Está ese idioma escrito en alguna parte?

Stéphane Bruckert
fuente
1
¡Buena pregunta y ejemplos geniales de código abierto! ;-)
Leo Natan

Respuestas:

16

El objetivo C, como C, no tiene espacios de nombres. Esto significa que si alguien ya ha definido una función fooo una clase Bar, debe ser globalmente única y no puede definirla. Esto puede generar muchos dolores de cabeza cuando tiene su código y luego agrega otra biblioteca y de repente las cosas se rompen en lugares extraños.

No es una pauta presentada por Apple para esto en Programación con C Objetivo: Convenios sección de la biblioteca desarrollador iOS:

Algunos nombres deben ser únicos en su aplicación

Cada vez que crea un nuevo tipo, símbolo o identificador, primero debe considerar el alcance en el que el nombre debe ser único. A veces, este alcance puede ser la aplicación completa, incluidos sus marcos vinculados; a veces, el alcance se limita solo a una clase adjunta o incluso a un bloque de código.

Los nombres de clase deben ser únicos en toda una aplicación

Las clases de Objective-C deben nombrarse de manera única no solo dentro del código que está escribiendo en un proyecto, sino también en cualquier marco o paquete que pueda incluir. Como ejemplo, debe evitar el uso de nombres de clase genéricos como ViewController o TextParser porque es posible que un marco que incluya en su aplicación no cumpla con las convenciones y cree clases con los mismos nombres.

Para mantener los nombres de clase únicos, la convención es usar prefijos en todas las clases. Habrás notado que los nombres de clase Cocoa y Cocoa Touch generalmente comienzan con NS o UI. Los prefijos de dos letras como estos están reservados por Apple para su uso en clases marco. A medida que aprenda más sobre Cocoa y Cocoa Touch, encontrará una variedad de otros prefijos que se relacionan con marcos específicos:

...

Sus propias clases deberían usar prefijos de tres letras. Estos pueden relacionarse con una combinación del nombre de su empresa y el nombre de su aplicación, o incluso un componente específico dentro de su aplicación. Como ejemplo, si su empresa se llamara Whispering Oak, y estaba desarrollando un juego llamado Zebra Surprise, podría elegir WZS o WOZ como prefijo de clase.

Por lo tanto, las bibliotecas que usted menciona rompen esta convención, pero llegan al corazón del problema de la falta de espacios de nombres dentro del Objetivo C.

Lectura adicional
Espaciado de nombres por NSHipster
¿Cuál es la mejor manera de resolver una colisión de espacio de nombres de Objective-C?
¿Cómo se usan los espacios de nombres en el código de Objective-C de iOS?

Comunidad
fuente
Parece que Objective-C realmente necesita espacios de nombres ...
Chris Cirefice
1
@ChrisCirefice sería realmente agradable, pero lo que hay que tener en cuenta es que el Objetivo C es una capa delgada encima de C. Intentar introducir espacios de nombres allí es probablemente más difícil de lo que parece sin romper cosas. Excavando ¿Por qué Objective-C no tiene espacios de nombres? Encontré desarrolladores de Clang: agregar espacios de nombres a Objective-C . Recuerde, @se usa porque no se usa en C ... intentar agregar otro operador que no rompa otras cosas es un desafío.
1
Los espacios de nombres de @ChrisCirefice no resuelven nada. Los conflictos de prefijos se convierten en conflictos de espacio de nombres.
Miles Rout
@MichaelT El objetivo C no ha sido una capa delgada encima de C por un tiempo (Objetivo C 2.0). Ahora Apple ha cambiado su enfoque a Swift, que incluye características más modernas, como espacios de nombres, pero actualmente carece de otras características del Objetivo C.
Leo Natan