objective-c namespaces

objective c - ¿Las colisiones del espacio de nombres son realmente un problema en Objective-C?



namespaces (4)

Objective-C no tiene espacios de nombres, y muchos (como CocoaDevCentral''s Cocoa Style Guide ) recomiendan que se prefijan los nombres de las clases con las iniciales para evitar la colisión del espacio de nombres.

Citando del enlace de arriba:

Objective-C no tiene espacios de nombres, así que prefija los nombres de las clases con las iniciales. Esto evita la "colisión del espacio de nombres", que es una situación donde dos piezas de código tienen el mismo nombre pero hacen cosas diferentes.

Eso tiene sentido, supongo. Pero, sinceramente, en el contexto de una aplicación relativamente pequeña (por ejemplo, un juego de iPhone), ¿es esto realmente un problema? ¿De verdad debería cambiar el nombre de MyViewController a ZPViewController? Si no, ¿en qué punto las colisiones del espacio de nombres realmente se convierten en una preocupación?


Las aplicaciones pequeñas no deberían usar todos los nombres buenos, por lo que no tendrán problemas con los espacios de nombres.

Pero es una buena idea acostumbrarse al estilo en el que generalmente se escriben los idiomas. Hace que sea más fácil leer el código de otras personas y que otros lean el suyo.

E. g., Use variables camelCase en Java, pero CamelCase vars en C #, hyphen_separated_names en C, etc.

Le facilitará aprender a largo plazo.


Si está escribiendo una aplicación que usa un conjunto de bibliotecas, ya sabe cómo se ve su espacio de nombres y solo necesita seleccionar nombres que no entren en conflicto con las funciones disponibles existentes.

Sin embargo, si está escribiendo una biblioteca para que otros la utilicen, entonces debe elegir un prefijo razonablemente único para evitar las colisiones de nombres con otras bibliotecas. Con solo dos caracteres todavía puede haber colisiones de nombres, pero la frecuencia se reducirá.


He leído (pero no he verificado) que Apple tiene clases privadas en sus frameworks que no incluyen prefijos en los nombres. Entonces, si los nombres de sus clases de aplicación no tienen prefijos, corre el riesgo de colisionar con ellos.


He trabajado con repositorios donde las clases no tenían prefijo. (O solo algunas de las clases fueron prefijadas).

Una cosa que encuentro dolorosa es que a veces es difícil saber si un código fue escrito por alguien dentro o fuera de la compañía. Usar un prefijo consistente lo hace inmediatamente obvio para alguien que lee el código por primera vez.

Tenga en cuenta que el código se leerá muchas más veces que las escritas.

Además, definitivamente puede ser útil cuando se usan herramientas como grep y sed .