¿Hay una excusa para nombres cortos de variables?

140

Esto se ha convertido en una gran frustración con la base de código en la que estoy trabajando actualmente; Muchos de nuestros nombres de variables son cortos y no descriptivos. Soy el único desarrollador que queda en el proyecto, y no hay documentación sobre lo que hacen la mayoría de ellos, por lo que tengo que dedicar más tiempo para rastrear lo que representan.

Por ejemplo, estaba leyendo sobre un código que actualiza la definición de una superficie óptica. Las variables establecidas al inicio fueron las siguientes:

double dR, dCV, dK, dDin, dDout, dRin, dRout
dR = Convert.ToDouble(_tblAsphere.Rows[0].ItemArray.GetValue(1));
dCV = convert.ToDouble(_tblAsphere.Rows[1].ItemArray.GetValue(1));
... and so on

Tal vez soy solo yo, pero esencialmente no me dijo nada sobre lo que representaban, lo que dificultó la comprensión del código más abajo. Todo lo que sabía era que era una variable analizada en una fila específica de una tabla específica, en algún lugar. Después de buscar un poco, descubrí lo que significaban:

dR = radius
dCV = curvature
dK = conic constant
dDin = inner aperture
dDout = outer aperture
dRin = inner radius
dRout = outer radius

Les cambié el nombre a esencialmente lo que tengo allí arriba. Alarga algunas líneas, pero siento que es un intercambio justo. Sin embargo, este tipo de esquema de nombres se utiliza en gran parte del código. No estoy seguro de si es un artefacto de los desarrolladores que aprendieron trabajando con sistemas más antiguos, o si hay una razón más profunda detrás de esto. ¿Hay una buena razón para nombrar variables de esta manera, o estoy justificado para actualizarlas a nombres más descriptivos a medida que las encuentro?

KChaloux
fuente
98
Me parece que en ese caso específico, esos son nombres de variables copiados directamente de una fórmula matemática de larga data.
Dave Nay
1
la única excusa que aceptaría sería "Mi compañero me dijo que está bien después de revisar el código"
mosquito
35
Si no puede entender el código matemático debido a nombres de variables cortos, tenga en cuenta que puede ser porque no entiende las matemáticas, no porque los nombres sean demasiado cortos. La alteración de expresiones matemáticas que no entiendes no es un proceso de alta confiabilidad. Una vez que comprenda las matemáticas, la longitud de los nombres de las variables es irrelevante. Sin embargo, haz un favor a los demás y deja una cita (en un comentario) a alguna descripción relevante de las matemáticas, ¡si tuvieras que aprenderlo!
Rex Kerr
3
Cualquier identificador que lleva el nombre de Donkey Kong se aprueba: dK = conic constant.
Thomas Eding
8
Por el contrario, uno podría preguntar si la ignorancia del campo de dominio justifica ignorar sus convenciones. Al final, depende del contexto.
Daniel C. Sobral

Respuestas:

234

Parece que estos nombres de variables se basan en las abreviaturas que esperaría encontrar en un libro de texto de física que resuelve varios problemas de óptica. Esta es una de las situaciones en las que los nombres de variables cortos a menudo son preferibles a los nombres de variables más largos. Si tiene físicos (o personas que están acostumbradas a resolver las ecuaciones a mano) que están acostumbrados a usar abreviaturas comunes como Rin, Rout, etc., el código será mucho más claro con esas abreviaturas de lo que sería con nombres de variables más largos. También hace que sea mucho más fácil comparar fórmulas de documentos y libros de texto con código para asegurarse de que el código realmente esté haciendo los cálculos correctamente.

Cualquiera que esté familiarizado con la óptica reconocerá de inmediato algo como Rin como el radio interno (en un documento de física, inse representaría como un subíndice), Rout como el radio externo, etc. Aunque es casi seguro que puedan traducir mentalmente algo Al igual que innerRadiuscon la nomenclatura más familiar, hacerlo haría que el código sea menos claro para esa persona. Haría más difícil detectar casos en los que una fórmula familiar se hubiera codificado incorrectamente y haría más difícil traducir ecuaciones en código hacia y desde las ecuaciones que encontrarían en un documento o en un libro de texto.

Si usted es la única persona que mira este código, nunca necesita traducir entre el código y una ecuación óptica estándar, y es poco probable que un físico vaya a necesitar mirar el código en el futuro, tal vez sí lo haga. tiene sentido refactorizar porque el beneficio de las abreviaturas ya no supera el costo. Sin embargo, si se tratara de un nuevo desarrollo, seguramente tendría sentido usar las mismas abreviaturas en el código que encontraría en la literatura.

Justin Cave
fuente
17
¿Y si no hay físicos o matemáticos en el personal? El código se me dejó esencialmente a mí. Es en gran parte indocumentado. ¿Sería más difícil leer los nombres descriptivos?
KChaloux
127
+1 No es irracional esperar que un programador entienda el dominio en el que está trabajando. Por otro lado, en trabajos matemáticos, las variables generalmente se definen en un lugar conveniente. En un código como este, esperaría un comentario destacado que muestre la forma larga.
Karl Bielefeldt
15
+1: Lo que básicamente estás diciendo es que un programador que entiende el dominio en el que está trabajando comprenderá los nombres de las variables. Esto va a ser igual en muchos proyectos incluso con nombres de variables más largos. p.ej. una variable nombrada columnen un juego de estrategia militar muy probablemente significa algo diferente de lo que sería en el software de gráficos.
Steven Evers
23
En la programación médica, a menudo encontrará términos que persisten en la esfera de la programación. Por ejemplo, con oftalmología verá OU, OD y OS. Estos denotan qué ojo, por ejemplo, ouSphere puede hacer referencia al componente 'esfera' de una receta de anteojos para el ojo derecho. Serás un mejor programador si entiendes el dominio comercial para el que estás programando.
Bill
11
+1 por notar que los nombres cortos coinciden con los de las ecuaciones y fórmulas de documentos y textos. Cuando hago eso, incluyo los comentarios sobre dónde encontrar el material de referencia original.
Jay Elston
89

Las variables con vidas cortas deben nombrarse en breve. Como ejemplo, no escribes for(int arrayCounter = 0; arrayCounter < 10; arrayCounter++) { .... En cambio, lo usas for(int i ....

En general, se podría decir que cuanto más corto sea el alcance de la variable, más corto debería ser el nombre. Contadores de bucles son a menudo sólo letras individuales, dicen i, jy k. Las variables locales son algo como baseo fromy to. Las variables globales son algo más elaboradas, por ejemplo EntityTablePointer.

Quizás una regla como esta no se sigue con la base de código con la que trabaja. ¡Sin embargo, es una buena razón para refactorizar!

zxcdw
fuente
14
i, j y k para los índices de matriz representan una tradición que se remonta al menos a Fortran. Cualquier programador que se respete estará familiarizado con esta convención.
Dominic Cronin
77
Por lo general no escribo i, j, k, escribo algo así personPos, porque entonces no voy a olvidar lo que estoy iterando y lo que representa el índice.
Malcolm
18
-1, uso nombres largos para iteraciones de índice de matriz, pero les doy un nombre significativo en lugar de obvio y sin sentido arrayCounter . Hace que el código sea más fácil de leer y, al menos, le evita pisotear todo el contador externo cuando copia / pega otro bucle dentro de este.
Oleg V. Volkov
3
counter es un sustantivo o un adjetivo. Count es un sustantivo o un verbo. Por supuesto, todavía no llamar a algo arrayCounter, que haría uso personIndexo rowo lo que sea de describir lo que estoy viendo.
Wayne Werner
66
Cuando estoy haciendo un solo ciclo, lo uso i. Pero tan pronto como hago la transición a un bucle anidado, dejo caer la inomenclatura. La razón de esto es porque realmente quiero rastrear con qué variable de bucle se está trabajando, y ivs jpuede ser bastante engañoso en código denso. Hacerlo más legible y agregar más espacios en blanco es inherentemente necesario para mí.
jcolebrand
48

El problema con el código no son los nombres cortos, sino la falta de un comentario que explique las abreviaturas o señale algunos materiales útiles sobre las fórmulas de las cuales se derivan las variables.

El código simplemente asume la familiaridad del dominio del problema.

Eso está bien, ya que probablemente se requiera familiaridad con el dominio del problema para comprender y mantener el código, especialmente en el papel de alguien que lo "posee", por lo que le corresponde adquirir la familiaridad en lugar de andar alargando los nombres.

Pero sería bueno si el código proporcionara algunos consejos para servir como trampolines. Incluso un experto en dominios podría olvidar que dKes una constante cónica. Agregar una pequeña "hoja de trucos" en un bloque de comentarios no estaría de más.

Kaz
fuente
Finalmente terminé yendo con algo como esto.
KChaloux
55
Esto está mal. No hay razón para hacer que su código sea difícil de leer para obligar a las personas a pasar más tiempo "aprendiéndolo". No estás enseñando, solo estás ralentizando a la gente. Además, prácticamente nunca hay un solo propietario de código para siempre. Estás siendo miope y egoísta.
xaxxon
77
Es su interpretación la que está mal, no la respuesta. El código implementa algunas matemáticas que existen fuera de ese código e independientemente de él, y que vinieron antes del código. Mantener el mismo nombre es útil. Alguien que mantenga el código probablemente tendrá que estudiar matemáticas externas, y no tener que mapear entre dos esquemas de nombres ayudará a esa persona.
Kaz
19

Para ciertas variables que son bien conocidas en el dominio del problema, como el caso que tiene aquí, los nombres de variables concisos son razonables. Si estoy trabajando en un juego, quiero que mis entidades de juego tengan variables de posición xy y, no horizontalPositiony verticalPosition. Asimismo contadores de bucles que no tienen ningún semántica más allá de indexación, que esperan ver i, j, k.

Russell Borogove
fuente
Yo diría que cv, din y dout no son inmediatamente obvios (aunque aparentemente están establecidos en campos específicos). No discutiría sobre xey, ya que las coordenadas cartesianas son aplicables para cualquier número de campos, y se enseñan a todos en la escuela intermedia y secundaria.
KChaloux
1
Y xy y, aunque es común, no llevan implícitos aspectos importantes como en el origen de.
Ross Patterson
3
@RossPatterson: sin embargo, hay muchos contextos donde eso simplemente no es importante. Por ejemplo, considere un ciclo como for (x,y) in list_of_coordinates: print x,y: El origen no importa particularmente cuando se trata de entender el código.
Bryan Oakley
16

Según el "Código limpio":

Los nombres de las variables deberían:

  • Se intencional revelando
  • Evitar la desinformación
  • Hacer distinciones significativas
  • Ser pronunciable
  • Ser buscable

Las excepciones son los proverbiales i,j,k,m,nutilizados para bucles.

La variable te nombra, con razón, te quejas de no hacer nada de lo anterior. Esos nombres son malos nombres.

Además, como todos los métodos deben ser cortos , el uso de prefijos para indicar el alcance o el tipo ya no está en uso.

Estos nombres son mejores:

radius
curvature
conicConstant
innerAperture
outerAperture
innerRadius
outerRadius

Un comentarista dice que esto sería demasiado complejo con nombres de variables largos:

ingrese la descripción de la imagen aquí

Los nombres cortos de variables tampoco lo hacen simple:

fnZR = (r^2/fnR(1+Math.sqrt((1+k) * (r^2/R^2)))) + a[1]*r^2 + a[1]*r^4 + a[1]*r^6 ...;

La respuesta son nombres largos y resultados intermedios hasta que obtenga esto al final:

thisNiceThing =  ( thisOKThing / thisGreatThing ) + thisAwsomeThing;
usuario61852
fuente
26
Estas variables probablemente se usan en fórmulas matemáticas en el código. Las fórmulas matemáticas son mucho más fáciles de leer con nombres cortos de variables. Uso nombres largos de variables en la mayoría de mi código, pero las matemáticas son mejores con nombres cortos de variables. Ejemplo al azar: tener en cuenta el tiempo que esto sería con nombres largos de variable.
MarkJ
@ Mark J Tienes razón.
Tulains Córdova
1
Los resultados intermedios tienen el beneficio adicional de reducir y aislar los errores de programación. Nuestros cerebros solo pueden procesar tantos datos a la vez, y es difícil detectar el error en algo comofnZR = (r^2/fnR(1+Math.sqrt((1+k)) * (r^2/R^2))) + a[1]*r^2 + a[1]*r^4 + a[1]*r^6 ...;
falta de párpados
1
No es tan difícil si ese es tu pan y mantequilla.
Radu
1
El punto no es escribir una línea. Pero el problema es que si necesita cambiar algo y utilizar otra fórmula que ahora usted tiene un problema en el que se necesita mucho tiempo para averiguar lo que long_nameel Ren el libro de texto se refiere a. Utilice resultados intermedios, pero mantenga sus matemáticas complejas lo más cerca posible del dominio del problema para que pueda mantenerlo si necesita agregar una función.
slebetman
8

Hay dos buenas razones para no cambiar el nombre de las variables en el código heredado.

(1) a menos que esté utilizando una herramienta de refactorización automatizada, la posibilidad de introducir errores es alta. Por lo tanto, "si no está roto, no lo arregles"

(2) hará que sea imposible comparar versiones actuales con versiones anteriores para ver qué cambió. Esto hará que el mantenimiento futuro del código sea más difícil.

ddyer
fuente
77
Absolutamente correcto, pero el riesgo de falta de comprensión es mucho mayor.
Ross Patterson el
2
Tiene problemas mucho mayores si sus herramientas no pueden manejar problemas simples como los que mencionó.
AndSoYouCode
Respuestas (1) Cobertura razonable de pruebas automatizadas y encapsulación sana, (2) Competencia con control de versiones.
Adamantish
5

¿Hay una buena razón para nombrar variables de esta manera, o estoy justificado para actualizarlas a nombres más descriptivos a medida que las encuentro?

La razón para usar nombres más pequeños es si el programador original les resulta más fácil trabajar con ellos. Presumiblemente, tienen el derecho de determinar que ese sea el caso, y el derecho de no tener las mismas preferencias personales que usted tiene. Personalmente, encontraría ...

dDin better than dDinnerAperture
dDout better than dDouterAperture

... si los estuviera usando en cálculos largos y complejos. Cuanto más pequeña es la expresión matemática, a menudo es más fácil ver todo de una vez. Aunque si ese fuera el caso, podrían ser mejores como dIn y dOut, por lo que no había una D repetitiva que pudiera conducir a un error tipográfico fácil.

Por otro lado, si le resulta más difícil trabajar con él, elimínelo y cambie el nombre a su forma más larga. Especialmente si eres responsable de ese código.

Gran maestro B
fuente
77
Por lo menos, ciertamente me estoy deshaciendo de la notación húngara de sistemas ...
KChaloux
44
¿El líder des húngaro? Pensé que era cálculo como en adentro dx^2/dx = 2x.
Shannon Cesantía
77
Si lo viera dDinnerAperturesolo, lo leería como "Apertura de la cena", y me preguntaría si es solo una forma divertida de decir "tu boca". Nunca he sido fanático del estilo de "mayúscula seguido de minúsculas). Muy confuso a veces."
Darrel Hoffman
2
+1 esta es la respuesta. Las fórmulas matemáticas largas son mucho más fáciles de leer con nombres cortos de variables. Estas variables probablemente se usan en fórmulas matemáticas en el código. Las fórmulas matemáticas son mucho más fáciles de leer con nombres cortos de variables. Uso nombres largos de variables en la mayoría de mi código, pero las matemáticas son mejores con nombres cortos de variables. Ejemplo al azar: tener en cuenta el tiempo que esto sería con nombres largos de variable.
MarkJ
1
@ShannonSeverance Estoy de acuerdo contigo. Procedente de una formación en ingeniería, d definitivamente debería reservarse para el cálculo cuando se usan nombres de variables en el sentido matemático (como se menciona a menudo aquí).
CodeMonkey
4

En general, creo que la regla para esto debería ser que puede usar nombres de variables extremadamente cortos donde sepa que las personas que son "expertas en el arte" de su código particular entenderán inmediatamente la referencia de ese nombre de variable. (Siempre tiene comentarios para la excepción de este caso de todos modos), y que el uso localizado de las variables se puede discernir fácilmente en función del contexto de cómo se usan.

Para ampliar esto, significa que no debe salir de su camino para ofuscar sus nombres de variables, pero puede usar abreviaturas para sus nombres de variables, donde sabe que solo las personas que entienden el concepto subyacente de su código son probables para leerlo de todos modos.

Para usar un ejemplo del mundo real, recientemente, estaba creando una clase de Javascript que tomaría una latitud y le diría la cantidad de luz solar que esperaría en una fecha determinada.

Para crear esta clase de reloj de sol , me referí a una media docena de recursos, el Astronomy Almanac y fragmentos de otros lenguajes (PHP, Java, C, etc.).

En casi todos estos, usaron abreviaturas idénticas similares, que a primera vista no significan absolutamente nada.

K` T` EPS` deltaPsi` eot` LM`RA

Sin embargo, si tiene conocimientos de física, puede comprender cuáles eran. No esperaría que nadie más tocara este código, entonces, ¿por qué usar nombres de variables detallados?

julianTime` nutationOfEclipticalLongitudeExpressedInDegrees` equationOfTime` longitudeMean` rightAscension.

Además, muchas veces, cuando los nombres de las variables son transitorios, es decir, solo se usan para asignar temporalmente algún valor, entonces con frecuencia no tiene sentido usar una versión detallada, especialmente cuando el contexto de la variable explica su propósito.

Laykes
fuente
1

Absolutamente lo hay; a menudo un nombre de variable corto es todo lo que se necesita.

En mi caso, estoy haciendo navegación de puntos de referencia en mi clase senior de robótica, y programamos nuestros robots en KISS-C. Necesitamos variables para las coordenadas actuales y de destino (x, y), distancias (x, y), encabezados actuales y de destino, así como ángulos de giro.

Especialmente en el caso de las coordenadas xey, un nombre de variable largo es completamente innecesario, y nombres como xC (actual x), yD (destino y) y pD (phi de destino) son suficientes y son los más fáciles de entender. en este caso.

Podría argumentar que estos no son 'nombres de variables descriptivas' como lo dictaría el protocolo del programador, pero dado que los nombres se basan en un código simple (d = destino, c = actual), un comentario muy simple al principio es toda la descripción ellos requieren.

George Gorski
fuente
0

¿Hay una buena razón para nombrar variables de esta manera, o estoy justificado para actualizarlas a nombres más descriptivos a medida que las encuentro?

Por lo general, los algoritmos complejos se implementan en matlab (o lenguaje similar). Lo que he visto es que las personas simplemente toman el nombre de las variables. De esa manera, es simple comparar implementaciones.

Todas las demás respuestas son casi correctas. Estas abreviaturas se pueden encontrar en matemáticas y física, excepto que no comienzan con d(como en su ejemplo). Las variables que comienzan con d generalmente se nombran para representar la diferenciación .

Todas las guías de codificación normales indican que no se nombren las variables con la primera letra que representa el tipo (como en su caso), porque es muy fácil explorar el código en todos los IDE modernos.

BЈовић
fuente
Correcto, ese elemento estaba desapareciendo independientemente de lo que la gente terminara diciendo. Hay una especie de esquizofrenia mitad húngara mitad no húngara en la base de código que estoy actualizando a medida que la encuentro.
KChaloux
0

Se me ocurre una razón para que los nombres de las variables sean razonablemente cortos.

Los nombres cortos son fáciles de leer usando un espacio de ojos más corto, por lo tanto, un período de atención corto.

Por ejemplo, una vez que me acostumbro al hecho de que svdb significa "guardar en la base de datos", la velocidad de escaneo del código fuente mejora, ya que solo tengo que escanear rápidamente 4 caracteres en lugar de leer SaveToDatabase (14 caracteres, las cosas empeoran para nombres de operaciones más complejas). Digo "escanear", no "leer", porque eso toma una parte importante del análisis del código fuente.

Al escanear a través de una gran cantidad de código fuente, esto puede proporcionar buenas ganancias de rendimiento.

Además, solo ayuda al programador perezoso a escribir estos nombres cortos al escribir código.

Por supuesto, se espera que todos estos "shorthands" estén listados en alguna ubicación estándar en el código fuente.

Amol
fuente
1
No leemos palabras como un conjunto de caracteres, las leemos como formas y resolvemos detalles condicionalmente cuando falla la comprensión de un vistazo. La longitud que debe tomar una palabra para leer más tiempo es mucho mayor que 4 caracteres, y podemos procesar mentalmente camelCase y otros medios para dividir palabras de nombre variable como límites de palabras. Dudo que una prueba de lectura confirme que los nombres más cortos mejoran la velocidad de comprensión de lectura; en cambio, al eliminar palabras reconocibles, habrá una disminución de la velocidad hasta que las nuevas palabras se asimilen (lo cual usted mismo señala).
párpado
0

Para enmarcar lo que @zxcdw dijo de una manera ligeramente diferente, y elaborarlo en términos de enfoque:

Las funciones deben ser puras , breves y una perfecta encapsulación de algunas funciones: lógica de caja negra , independientemente de si ha estado intacta durante 40 años, continuará haciendo el trabajo para el que fue diseñada, debido a su interfaz (entrada y salida) es sonido, incluso si no sabes nada de sus partes internas.

Este es el tipo de código que desea escribir: este es un código que dura y es fácil de portar.

Cuando sea necesario, componga funciones a partir de otras llamadas de función (en línea) , para mantener el código detallado.

Ahora, con un nombre de función adecuadamente descriptivo (¡detallado si es necesario!), Minimizamos cualquier posibilidad de mala interpretación de esos nombres de variables acortados, ya que el alcance es muy pequeño.

Ingeniero Arcano
fuente
-1

Los nombres de las variables deben ser lo más descriptivos posible para ayudar a la legibilidad del programa. Usted mismo lo experimentó: tuvo muchos problemas para identificar lo que hizo el programa debido a la mala denominación.

No hay una buena razón para no usar un nombre descriptivo. Le ayudará a usted y a todos los que trabajan / trabajarán en el proyecto. Bueno, en realidad hay un único uso válido para nombres cortos: contadores de bucles.

marco-fiset
fuente
66
Tenga en cuenta que int dummy_variable_for_for_loops;es lo más descriptivo posible.
Kaz
44
-1 porque esta respuesta es confusa. Primero dice que no hay buenas razones, luego termina diciendo que en realidad las hay. La respuesta sería mejor si se reformulara para no contradecirse.
Bryan Oakley
Cambiaría eso para leer "tan descriptivo como sea ​​necesario ". Si un nombre corto transmite el propósito de la variable, entonces está bien usar un nombre corto .
Maximus Minimus
-1

¿Seguramente para eso son // los comentarios?

Si las tareas tienen comentarios que son descriptivos, obtienes lo mejor de ambos mundos: una descripción de la variable y cualquier ecuación son fácilmente comparables con su contraparte de libro de texto.

Richie
fuente
-1

Para las interfaces (por ejemplo, firmas de métodos, firmas de funciones) tiendo a resolver esto anotando las declaraciones de parámetros. Para C / C ++, esto decora el archivo .h, así como el código de la implementación.

Hago lo mismo para las declaraciones de variables donde conocer el uso de la variable no es obvio en contexto y en el nombre. (Esto también se aplica en idiomas que no tienen una escritura fuerte).

Hay muchas cosas que no queremos obstruir el nombre de la variable. Es el ángulo en radianes o grados, hay cierta tolerancia en la precisión o el rango, etc. La información puede proporcionar afirmaciones valiosas sobre características que deben tratarse correctamente.

No soy religioso al respecto. Simplemente estoy interesado en la claridad y en asegurarme de saber qué es la próxima vez que mi olvidadizo visite el código. Y cualquiera que mire por encima de mi hombro tiene lo que necesita saber para ver dónde está algo apagado, lo que es esencial (lo último crítico para un mantenimiento adecuado).

orcmid
fuente
-1

¿Hay una excusa para nombres de variables excesivamente cortos?

Primero: nombrar una variable para la energía e mientras se calculan fórmulas como E = MC2 NO es un nombre excesivamente corto. Usar símbolos como argumento para nombres cortos no es válido

Esta pregunta me resultó bastante interesante, y solo puedo pensar en una excusa y es el dinero.

Digamos, por ejemplo, que está conectando javascript para un cliente que sabe que el archivo debe descargarse muchas veces por segundo. Sería más barato y mejoraría la experiencia de los usuarios si el archivo (en número de bytes) es lo más pequeño posible.

(Solo para mantener el ejemplo 'realista', no se le permitió usar una herramienta de minificador, ¿por qué? Problemas de seguridad, no se permiten herramientas externas para tocar la base del código).

AlexanderBrevig
fuente
1
Su ejemplo aún no es muy realista.
Radu
-1

Noto que las otras respuestas no mencionan el uso de la notación húngara. Esto es ortogonal al largo debate, pero relevante para los esquemas de nombres en general.

double dR, dCV, dK, dDin, dDout, dRin, dRout

La "d" al comienzo de todas estas variables está destinada a indicar que son dobles; pero el lenguaje hace cumplir esto de todos modos. A pesar de la brevedad de estos nombres, ¡son hasta un 50% redundantes !

Si vamos a usar una convención de nomenclatura para reducir los errores, es mucho mejor codificar la información que el idioma no está verificando. Por ejemplo, ningún idioma se quejará dK + dRen el código anterior, aunque no tenga sentido agregar un número adimensional a una longitud.

Una buena manera de prevenir tales errores es usar tipos más fuertes; sin embargo, si vamos a usar dobles, entonces un esquema de nombres más apropiado podría ser:

// Dimensions:
// l  = length
// rl = reciprocal length
double lR, rlCV, K, lDin, lDout, lRin, lRout

El idioma aún nos permitirá escribir K + lR, pero ahora los nombres nos dan una pista de que esto podría ser incorrecto.

Esta es la diferencia entre sistemas húngaros (generalmente malos) y aplicaciones húngaros (posiblemente buenos)

http://en.wikipedia.org/wiki/Hungarian_notation

Warbo
fuente
1
En realidad, C ++ puede quejarse K + lR si declara correctamente sus unidades. Con las unidades SI puede realizar comprobaciones de dimensionalidad y conversión de unidades. Agregar no 3_feet + 2_meterdebería ser un problema, mientras que 2_meter+1_seconddebería ser un error en tiempo de compilación.
MSalters
@MSalters Eso es genial; No se me había ocurrido un enfoque de plantilla / macro. Aún así, en una pregunta "independiente del idioma" como esta, agruparía todas las comprobaciones de unidades de tiempo de compilación bajo el paraguas de "tipos más fuertes", independientemente de si el idioma los llama "tipos" o no;)
Warbo
Plantilla, necesariamente. No puede hacer el cálculo de tipo necesario en las macros.
MSalters
-2

El único caso donde los nombres de variables ilegiblemente cortos son aceptables en la ingeniería de software moderna es cuando existen en un script y el rendimiento de ese script (en una red en general) es importante. Incluso entonces, mantenga el script con nombres largos en el control de origen y minimice el script en producción.

Telastyn
fuente
99
¿Qué pasa cuando se realizan operaciones matemáticas donde los términos se consideran de conocimiento común en el dominio? Ejemplo: usar M en lugar de "masa" en e = mc ^ 2
Andy Hunt
2
@andyBursh: tendré cuidado allí. Los programadores no suelen ser expertos (o incluso competentes) en su dominio del problema. Dicho esto, este tipo de cosas pueden estar bien, especialmente si existe el enlace de comentario apropiado a la fórmula en cuestión; Me había olvidado de este escenario.
Telastyn
8
@Telastyn: sin embargo, si asume que el programador no es un experto, eso a menudo lleva a tomar abreviaturas que tienen un significado muy bien definido y convertirlas en nombres más largos que son al menos algo ambiguos (es decir, alguien decide nombrar una variable local) radiuscuando almacena el radio interno sin entender eso es mucho más ambiguo que Rin). Y luego el desarrollador no experto tiene que traducir entre su nomenclatura única y la nomenclatura que la empresa entiende cada vez que hay una discusión que involucra ecuaciones.
Justin Cave
2
¿Qué pasa con "i" para un contador de bucle? ¿O "x" e "y" cuando se trata de una coordenada? ¿O una variable cuyo alcance es solo dos líneas de código?
Bryan Oakley
44
No estoy de acuerdo con esta respuesta. Un programador que trabaje en un programa que contenga expresiones matemáticas complejas podría leer al menos las fórmulas en la especificación, de lo contrario no son competentes. Eso no es un problema de conocimiento de dominio, es una habilidad esencial: algunas competencias básicas de matemáticas antes de trabajar en un programa matemático. Si el programador no tiene acceso a las fórmulas de especificaciones, ese es otro problema, y ​​no puede resolverse solo con comentarios.
MarkJ