2009-04-22 13 views
20

Jeff terminó his post hablando de esto, pero no entiendo la idea.¿Por qué las mayúsculas se consideran constantes como un mal estilo de codificación?

Entonces, ¿por qué crees que este es un mal estilo de codificación?

EDIT:

Yo, como muchos de ustedes, no creo que es un mal estilo de codificación. Pero Jeff es mucho mejor programador que yo, y su punto de vista encendió luces en mi cabeza para responder si me equivocaba. Fui desarrollador de Delphi durante algunos años y ahora me estoy convirtiendo en un desarrollador de C#, y en Delphi era una práctica común.

+6

Probablemente debería ser wiki de la comunidad. – chaos

+0

En lo que respecta a Delphi, generalmente se prohíben todas las mayúsculas para las constantes [de acuerdo con la guía de estilo oficial] (http://edn.embarcadero.com/article/10280#3.3). – DBedrenko

Respuesta

56

Todas las mayúsculas es la designación tradicional C de una macro constante de preprocesador. Es muy útil tener estos en un espacio de nombre diferente de cualquier otra cosa, ya que el preprocesador sustituirá donde encuentre el nombre, independientemente de cosas como el alcance.

Una constante en el sentido que Jeff estaba usando es, semánticamente, una variable que no se puede cambiar. Obedece todos los principios de alcance y todo, y es semánticamente idéntica a una variable no const con el mismo valor.

Para decirlo de otra manera,

#define max_length 5 

es un problema, ya que alguien podría utilizar max_length como una variable en un contexto diferente, en la que normalmente sería segura, mientras que

const int max_length = 5; 

es simplemente una declaración de variable. Por lo tanto, hay una ventaja en el uso de

#define MAX_LENGTH 5 

porque la convención es que sólo las constantes del preprocesador son todas las tapas, de modo que no interfiera con ningún otro uso.

+6

+1 Además, si usa macros para cálculos (digamos el bit canónico MAX() y MIN()), es útil saber que los argumentos para estos objetos tienen semántica previa al procesador y no semántica del compilador. – dmckee

+0

+1 ¡Muy buena respuesta! – eKek0

4

TODAS LAS GORRAS ES COMO GRITAR A ALGUIEN.

3

también hace que el código más difícil de LEA

2

FLIP la pregunta, ¿por qué utilizar MAYÚSCULAS?

3

Jeff tiene algunas cosas adicionales que decir sobre esto en los comentarios:

Sin embargo, por otro lado, y la razón por la que todavía uso de las mayúsculas y subrayar

Menos ¿código? Esa es una causa que vale la pena que merece una discusión seria.

Pero si llama algo "foo", "Foo", "_foo", o "FOO"? Meh.

Convenciones de nomenclatura son altamente controvertido y religioso. Los desarrolladores deberían elegir algo que les gusta, algo que afortunadamente no es demasiado en desacuerdo con las "convenciones locales ", y simplemente continúen. Un gran cantidad de discusiones y escrituras sobre el nombre no vale la pena.

Dicho esto, creo que TODO EN MAYÚSCULAS ES REALMENTE ¡DIFÍCIL DE LEER!

También uso esto para las constantes, pero también puedo entender por qué a algunas personas no les gusta. Es como escribir todo en minúsculas en alemán u otros idiomas.

2

Algunas personas consideran que TODO EL MAYÚSCULAS es "vieja escuela". Considere la diferencia entre:

const string ErrorMessage = "Some error message.";

y

const string ERROR_MESSAGE = "Some error message.";

Ambos son completamente utilizable, pero el todo en mayúsculas versión es menos utilizado por los desarrolladores más nuevos, como los que comenzaron con. RED.

Considero que es un mal estilo de codificación si su equipo usa un estilo diferente. Aparte de eso, realmente no me importa. Al menos cuando veo TODOS LOS MAYÚSCULAS en algún código compartido, puedo adivinar que es una constante.

+1

-1: No es "vieja escuela", sino que depende de la plataforma/idioma. En .NET es desalentador, pero se alienta a otros casos. – Richard

+2

Supongo que no leyó la publicación de Jeff, en la que específicamente lo llamó "vieja escuela". –

0

Utilizo ALL_CAPS para macros y símbolos de preprocesador. Entonces, mis constantes C anteriores a C99 son ALL_CAPS, pero no en ningún otro idioma que conozca.

7

No creo que sea un mal estilo de codificación. Tal vez pasado de moda, pero no está mal. Hace que las constantes se destaquen de otras variables.

2

No creo que sea es mal. En su mayoría, es una elección personal. Para su codificación personal, haga lo que quiera. Para su codificación profesional, siga la política de la compañía.

3

Bueno, está el viejo problema de legibilidad. La prueba con carcasa normal es simplemente más fácil de leer.

Existen excepciones, sin embargo. Los lenguajes como SQL generalmente son mayúsculas (aunque no distinguen entre mayúsculas y minúsculas).

Además, hay otros usos, como distinguir entre "constantes" y variables regulares, que verá en muchos lenguajes como PHP, Python, etc., aunque a Jeff por alguna razón no le guste eso, y aparentemente está en contra de las pautas de estilo del código C#.

Por lo general, no creo que esté mal en ninguna parte, pero creo que siempre se debe tratar de seguir las mejores prácticas generales. Cuando en Roma, haz como los romanos - al codificar Python, siga PEP 8 :)

2

Al igual que todo lo escrito en negrita no es una buena idea

+0

¿Escribió el código Java/.Net en Word? – romaintaz

+0

Un colega mío estableció su fuente de editor de código para que fuera negrita ... Definitivamente fue interesante poder leer su código en toda la sala. –

5

La única razón de peso para mí es la consistencia en el estilo. Para lenguajes que no sean .NET como Java/C++, las constantes de mayúsculas son ciertamente aceptables.

para C#, la norma es el uso de PascalCase, como se ha señalado aquí: C# naming convention for constants?

+3

Sí, asimilar el estilo de la plataforma/idioma es el camino a seguir. +1 –

30

Usted encontrará que una gran cantidad de declaraciones de Jeff son controvertidos en primer lugar, con una precisión de ser una preocupación secundaria. Su blog no sería tan popular si no fuera ocasionalmente inflamatorio. (Considere la última línea de Death to the Space Infidels, "Dicho esto, solo un idiota usaría pestañas para formatear su código.") Es honestamente subjetivo. No tome todo lo que dice como Verdadero y Bueno, no debe ser. Si no estás de acuerdo, ve a patear el trasero en los comentarios, y mira si él escribe de nuevo. :)

Creo que ALL_CAPS_CONSTANTS son perfectos: son instantáneamente reconocibles y familiares. Parte de las pautas de estilo de mi lugar de trabajo (y no tenemos tantas) es escribir todas las constantes estáticas en mayúsculas. No te preocupes solo use lo que use el resto de su equipo. La decisión de StudlyCaps frente a camelCase frente a SCREAMING_CAPS vale aproximadamente 90 segundos de discusión.

9

Francamente, no creo que sea un mal estilo de codificación. De hecho, incluso el estilo oficial del código Java hace constantes todas las mayúsculas (http://java.sun.com/docs/codeconv/html/CodeConventions.doc8.html), al igual que otras convenciones de lenguaje.

En teoría, es más difícil de leer: a los humanos nos gusta utilizar la altura variable de las letras para aumentar la velocidad de lectura (podemos inferir mucha información solo con la forma aproximada de la palabra y las primeras/últimas letras). Sin embargo, no tengo ningún problema con las frases cortas y mayúsculas. Difícilmente "grita" (al compilador no le importa lo grosero que seas), y muestra claramente que los nombres son potencialmente mutables y los que no lo son.

+0

_tu compilador no le importa exactamente lo grosero que sea_, a menos que esté escribiendo en [INTERCAL] (https://en.wikipedia.org/wiki/INTERCAL). – Ruslan

18

Gritando está bien. En el caso de la constante que le dice al lector

NO pensar en cambiar ME TARDE EN CÓDIGO

pero entiendo si los programadores blandos se ofenden.

2

Remapeé mi capslock en una tecla Ctrl (¡Woo emacs!). Así que creo que es un mal estilo cuando tengo que escribir nombres de 30 caracteres mientras mantengo presionado shift

+3

Por alguna razón, prácticamente nunca uso la tecla de bloqueo de mayúsculas, al menos intencionalmente. Escribo rápidamente, pero no uso la metodología de mecanografía táctil "oficial".Simplemente presiono las teclas con cualquier dedo que se sienta apropiado en ese momento, y no tengo problemas para escribir ninguno de los caracteres de la mano izquierda mientras mantengo presionado el botón de la izquierda. – supercat

0

Las constantes y CONSTANTS pueden diferir. Utilice mayúsculas solo cuando se trate con preprocesador, dicho esto, por ejemplo, en C++, se recomienda evitar eso y usar const variable o constexpr, que se denominaría como cualquier otra variable (tal vez con algún prefijo o algo para dejar en claro que es una constante pero ...).

Cuestiones relacionadas