2009-02-01 18 views
20

Me estoy enseñando Objective-C y noté en muchos libros y ejemplos el uso de 'k' y camel-casing en definición constante, p.¿Cuál es la importancia de comenzar constantes con 'k'?

#define kMyConstant 0 

¿Cuál es el significado de la 'k'? ¿Es esto único para el estilo Objective-C, o común a C en general? ¿Por qué la desviación de (lo que siempre he pensado como una mejor práctica) K_MY_CONSTANT estilo?

Gracias.

Respuesta

21

Se mencionó una vez antes en la pregunta SO, Lower case "k" in Cocoa.

Es una notación programación general no específica con el Objetivo-C (es decir notación húngara) y la "k" significa "constante".

Si nos fijamos en la Google cache de las directrices de Google para Objective-C se puede ver que se utilizan para incluirlo en su guía de estilo:

nombres constantes (# define, enumeraciones, las variables locales const, etc.) debe comenzar con una k minúscula y luego usar mayúsculas y minúsculas para delimitar las palabras, es decir kInvalidHandle, kWritePerm.

Aunque es un dolor escribir, son absolutamente vitales para mantener nuestro código legible. Las siguientes reglas describen lo que debe comentar y dónde. Pero recuerde: si bien los comentarios son muy importantes, el mejor código es la autodeterminación. Dar nombres razonables a tipos y variables es mucho mejor que usar nombres oscuros y luego tratar de explicarlos a través de comentarios.

Pero desde entonces ha sido eliminado en el live version del documento. Cabe señalar que va en contra de la Official Coding Guidlines for Cocoa de Apple.

+0

Muy interesante. "En general, no use el comando #define preprocessor para crear constantes. Para constantes enteras, use enumeraciones, y para constantes de coma flotante use el calificador const, como se describió anteriormente". ¡Gracias! – typeoneerror

+0

PD, perdón por la repetición de la pregunta. ¡Juro que busqué primero! ;) – typeoneerror

+0

@TypeOneError, no lo mencioné para señalar una pregunta repetida. No necesariamente creo que sea una repetición de esa pregunta exacta. Solo te estaba apuntando a otro recurso para leer. Su pregunta es un poco más amplia y probablemente una mejor. – mmcdole

3

Todas las mayúsculas (como en K_MY_CONSTANT) normalmente denotan una macro, no necesariamente una constante. En general, es importante que las macros se destaquen porque destruyen todos los espacios de nombres.

La convención 'k' se usa (pero no universalmente) para constantes que no sean macros en C/C++ y probablemente en otros idiomas. Sospecho que se usa 'k' porque 'c' ya se usa con frecuencia, ya sea para indicar un nombre de clase (como en CString) o que una variable es un contador.

3

La cosa kMyConstant se remonta a los viejos tiempos de programación de Mac (80s/90s siendo "muy viejo"). Este era un estándar que usaba Apple y muchos programadores de Mac también lo usaban; esto tomó el lugar de las definiciones MY_CONSTANT-type.

Me imagino que los autores que está leyendo eran programadores de Mac Pascal/C para la antigua Mac Toolbox antes de ser programadores de NeXT/Cocoa. Las bibliotecas Mac solían llamarse "Caja de herramientas": este era el conjunto de API y bibliotecas que se convirtieron en carbono a lo largo del tiempo.

Todavía uso kMyConstant a veces; conduce a mis colegas programadores de Unix de la vieja escuela a la locura.:-)

3

creo que el uso de un líder "k" se debe a que todas las lenguas pronuncian como una consonante sorda y por lo tanto recuerda a la gente de la pronunciación Inglés de "constante" :-)

No hay palabras reservadas a empezar con k, por lo que es más fácil como objetivo de búsqueda.

Alternativamente, desde un aspecto gráfico, como personaje principal proporciona una bandera muy clara delante del resto del nombre. La "c" inicial es menos obvia y podría utilizarse para indicar roles (como en la notación húngara) o clases (si se trata de un lenguaje insensible a mayúsculas y minúsculas).

MY_CONSTANT está bastante de acuerdo con las constantes basadas en macros. A veces es importante saber que una constante está definida por una macro, por ejemplo, que implica que se basa en literales y, por lo tanto, en un rango limitado de tipos de datos, además de estar definida en un ámbito global y por lo tanto (como Michael Burr señaló out) anula cualquier constante de espacio de nombre local.

Cuestiones relacionadas