¿Los prefijos de tipo y alcance valen las convenciones de nomenclatura?

13

Recientemente empecé mi primer trabajo como desarrollador de software, me sorprendió un poco que me dijeran que no tenía que seguir ninguna convención de nomenclatura en mi código. El código escrito por los grupos que trabajan en otros proyectos más grandes siguió las convenciones de nomenclatura, pero desde que me invitaron a escribir una nueva aplicación independiente, la sensación era que no importaba especialmente. Fue la última de mis preocupaciones, así que tomé la convención existente y la ejecuté.

int nTickCount  
bool bConnected  
object[] m_aItems  
fSum += fWeight * fValue  
class cManager  
enum etSystemStates  
etSystemStates eState  
cManager.cs

¿Pero realmente vale la pena? Me resulta difícil juzgar el efecto neto que tiene este tipo de convención de nomenclatura en la comprensión y detección de errores, pero, visualmente , parece un poco feo. Además, tener cada clase y archivo en el proyecto llamado cSomething parece bastante simple.

No estoy bajo la ilusión de que sea un gran problema en comparación con las cosas que hacen una diferencia obvia, como los algoritmos y arquitecturas que emplea. Pero cualquier convención que afecte a cada línea de código que escribo parece valer la pena.

¿Qué le parece la convención de nomenclatura más elegante y efectiva, si es que necesita ser utilizada? ¿Denota tipo y / o alcance?

pregunta Kate Gregory 01.08.2008 - 20:45

12 respuestas

28

Joel Spolsky escribió un artículo acerca de por qué existe la notación húngara y para qué estaba destinado. pregunta.

Los prefijos como tbl para una tabla de base de datos, int para un entero, etc. generalmente no son útiles; es trivial averiguar qué es qué del contexto o de sus herramientas de desarrollo en esos casos. Algo como el imp para medidas imperiales y la métrica cumplida tienen mucho más sentido porque, de lo contrario, solo puedes ver que son números de punto flotante.

area = width * height

se ve perfectamente bien mientras

impArea = metWidth * impHeight

te muestra directamente que algo está mal.

Personalmente solo uso nombres de variables descriptivas. $ number_of_items es obviamente un recuento de enteros. $ input_file_handle, $ is_active y $ encrypted_password tienen tipos obvios tanto en términos de tipo de datos de idioma como de tipo semántico.

respondido por el Mat 02.08.2008 - 00:34
13

Lo que estás describiendo se llama notación húngara . Una vez se consideró la mejor práctica, pero generalmente está mal visto ahora.

El artículo de Wikipedia contiene una sección sobre sus pros y sus contras.

respondido por el Dave Ward 01.08.2008 - 20:58
13

Sí, los prefijos pueden ser útiles, pero tengo un par de sugerencias:

Si todo tu equipo está utilizando las mismas convenciones, se vuelven mucho más útiles. Usarlos por tu cuenta es menos útil.

En los lenguajes con tipografía estática, no solo copie el tipo de variable. P.ej. "bSuscrito" es un mal nombre para una variable booleana en C # o Java, porque su IDE ya sabe de qué tipo es. Por otro lado, en C, que carece de un tipo booleano, sería información útil.

En C # y Java, puede considerar un prefijo para mostrar que un objeto puede ser nulo. O que una cadena ha sido html-escapada. O que representa una expresión regular, o una declaración SQL. O que una matriz ha sido ordenada. Usa tu imaginación.

Básicamente, se trata de preguntarte qué quieres que te diga un nombre de variable, y eso depende mucho del dominio y el idioma en el que estés trabajando.

respondido por el Michiel de Mare 02.08.2008 - 13:51
7

Hay varios "estilos" diferentes de convención de nombres por ahí, y la mayoría de ellos tiene algún valor para hacer que el código sea comprensible.

Lo que es MUCHO más importante es: usar nombres descriptivos para variables y funciones. En su ejemplo con "suma", "peso" y "valor", es posible que desee dar nombres más significativos: "totalCost", "lumberWeight", "lumberValuePerOunce" (aquí hago algunas suposiciones)

Encuentro convenciones como anteponer nombres de variables con un carácter que indica que el tipo distrae bastante en la mayoría de los idiomas modernos.

respondido por el Justin Standard 01.08.2008 - 20:54
6

La mayoría de los desarrolladores de .NET siguen las pautas de diseño de Microsoft ( enlace ), que es bastante similar a la de Java (la principal diferencia es que Microsoft favorece a Pascal Case para los nombres de los miembros) , mientras que Java favorece a Camel Case).

Aparte de eso, diría que la muestra de tu código es mucho menos legible debido al ruido adicional que has agregado.

respondido por el Karl Seguin 01.08.2008 - 21:23
5

Encuentro que, en su mayor parte, la guía de estilo de codificación de Google es bastante buena. Ya que le dijeron que puede usar cualquier estilo que desee, creo que debería comenzar por mirar esto, y elegir y elegir uno de ellos.

respondido por el Ryan Fox 01.08.2008 - 21:15
5

El prefijo de nombres de variables con tipos de datos (especialmente tipos de datos primitivos) aumenta el ruido visual, así como el riesgo de que un cambio pequeño se convierta en un cambio de nombre de gran explosión.

Re el primer punto, es "intStudentCount" realmente más claro que, por ejemplo, "numero de estudiantes"? ¿No sería "invoiceLineItems" al menos tan informativo como "aobjItems"? (El tipo de datos debe referirse al significado de los datos en el dominio del problema, no a la representación de bajo nivel).

En cuanto al segundo punto, ¿qué sucede cuando, por ejemplo, ¿Una selección prematura de int se sustituye por larga o doble? Lo que es peor, ¿qué sucede cuando una clase concreta se refacta en una interfaz con múltiples clases implementadoras? Cualquier práctica que incremente la carga de los escenarios de mantenimiento realistas me parece cuestionable.

respondido por el Joel Neely 04.08.2008 - 00:30
4

También podría depender de por qué está prefijando el nombre, en lugar de con lo que prefieres.

Como ejemplo, tiendo a usar un prefijo de 1-2 letras para los nombres de los controles en un formulario. No es porque no sé que el compilador encontrará fácilmente la clase correcta para el botón (como ejemplo), pero tiendo a diseñar formas grandes primero y luego escribir la mayor parte del código.

Tener un prefijo de bt para los botones hace que sea fácil encontrar el botón correcto después, en lugar de tener muchos nombres mezclados.

Sin embargo, no uso prefijos para nombrar variables, ni para el tipo (que en general no es tan útil), ni para el significado, el contexto o la unidad (que es la idea original detrás de la notación húngara).

respondido por el Lasse Vågsæther Karlsen 04.08.2008 - 12:17
3

En mi opinión, depende del idioma y el tamaño del proyecto. En realidad, nunca he ido tan lejos como para usar los prefijos de tipo en todas mis variables, pero usted quiere nombrarlos de una manera clara.

En un lenguaje de tipo estático, como el que estás usando, cuanto más cómodo me siento con el sistema de tipos, menos importante es la notación húngara. Por lo tanto, en Java o C # y especialmente en Haskell ni siquiera pensaría en agregar esos prefijos, ya que sus herramientas pueden decirle el tipo de cualquier expresión dada y detectarán la mayoría de los errores resultantes de una mala interpretación de un tipo. div>

respondido por el Peter Burns 01.08.2008 - 23:09
1

Los prefijos a menudo tienen sentido para los objetos, por ejemplo, en un formulario en el que podría tener 20 cuadros de texto que los llaman a todos tbSomething tiene sentido.

Sin embargo, en su mayoría no creo que valga la pena, especialmente para los tipos de valor.

Por ejemplo, supongamos que tienes:

short shortValue = 0;
//stuff happens

Meses después encuentra que necesita cambiarlo, un corto no es lo suficientemente grande. Ahora tienes:

int shortValue = 0;
//stuff happens

A menos que también cambie el nombre de la variable (en este caso, tiene más riesgo de romper el código que cambiar el tipo), ahora tiene un código confuso.

Es mejor tener un nombre que describa lo que contiene:

int loopCounter = 0;
//stuff happens

Si es necesario más tarde, eso debe cambiar a un largo: no hay problema.

Quizás haya más argumentos para estas convenciones en idiomas tipificados dinámicamente o aquellos sin un IDE.

    
respondido por el Keith 11.08.2008 - 14:05
0

Siempre he sido propenso a usar una abreviatura de 2 a 4 caracteres para el tipo delante de la variable. A veces parece tedioso, pero cuando trabaja con tipos de datos o situaciones complejas, se vuelve beneficioso. Creo que cae dentro de la categoría inferior de camellos.

Mirando tu ejemplo anterior, sería revisado ligeramente para ser:

int intTickCount;
bool boolConnected;
object[] aobjItems;

Las matrices siempre tienen una a delante del tipo para designar la matriz. Esto también me permite agrupar variables similares de instancias. Por ejemplo, puedo usar ...

taStore.Fill(dtStore);

... lo que indica que mi Store TableAdapter se está llenando en Store DataTable.

respondido por el Dillie-O 01.08.2008 - 21:21
0

Siempre he tratado de cumplir con el principio básico de que los prefijos y / o los sufijos se deben insertar solo cuando el código sea más legible (como en inglés).

Cuanto menos críptico, mejor ...

¿Por qué tener un método como este:

public boolean connect( String h, int p );

Cuando puedes tener algo como esto:

public boolean connect( String hostName, int port );

Por otra parte, los IDE de hoy realmente tienen una herramienta poderosa para refactorizar (especialmente Java) variables, nombres de métodos, clases, etc. La idea de decir que la información máxima con la menor cantidad de caracteres es antigua.

respondido por el Claude Houle 04.08.2008 - 02:41

Lea otras preguntas en las etiquetas