¿Vale la pena tener en cuenta las pautas de la convención de nombres?

13

Nombro mis variables usando las convenciones .Net:

  • camelCase para variables y campos (tiendo a usar _camelCase para campos privados en una clase)
  • PascalCase para métodos, propiedades y clases.

El único lugar en el que me desvío es en constantes y enumeraciones donde realmente prefiero el estilo Java SCREAMING_CAPS.

La base de código de mi empresa está llena del estilo de notación pseudohúngara de VB6 y VBScript, si no es que húngaro completo, es decir

  • s o str para Strings
  • I o int para Ints
  • d para decimal (o algunas veces doble)
  • o u obj para cualquier tipo de objeto

Me estremezco cada vez que veo ese estilo de código utilizado en el código de otra persona (incluso en el código greenfield, no solo en el antiguo legado), y me niego a usar ese estilo yo mismo. Ya mencioné la estandarización en las convenciones de nombres .Net en el pasado y simplemente se ignora: las personas que escriben en notación húngara continúan haciéndolo, aquellos de nosotros a quienes no les gusto, seguimos usando nuestro propio estilo; Estoy un poco miedo de que si hacemos estandarizado (que sigo presionando para que, pero nadie más parece importarle), que va a ser en la notación húngara, y no la forma recomendada y entonces me veré obligado a escribir el código de esa .

¿Estoy haciendo una montaña de un molehill con respecto a esto? ¿No debería importarme si el código está lleno de identificadores redundantes y no nombres descriptivos, y seguir usando mi propio camino y presionar para que se convierta en el estándar?

Wayne Molina
fuente
2
Buena pregunta. Las convenciones de nomenclatura están ahí para ayudar, no para obstaculizar. Cuando obstaculizan (porque su propósito original ya no es relevante), abandónelos.
Gary Rowe

Respuestas:

7

Lo único que debe preocuparte es que estás trabajando en un equipo donde a las personas no les importa limpiar un poco las cosas. Eso es muy triste.

Haz lo que haces, sigue usando el estilo moderno e invita a la gente (pero no los obligues) a adoptarlo también. Tomará tiempo por supuesto. Después de un tiempo verás si va a alguna parte y qué harás después.

PD: ¿Qué tal organizar una reunión sobre este tema e invitar a todos los involucrados? Luego obtendrá toda su atención, denotará el problema y presentará su enfoque. Les dará algo en qué pensar. Quizás de tus intentos locales no te estén tomando muy en serio.


fuente
+1 Actualmente, Refactor Rename es tan eficiente que apenas notará el impacto de realizar el cambio.
Gary Rowe
2
Lamentablemente, las personas de mi equipo ni siquiera usan eso. Tienen miedo de cambiar el nombre de las cosas incluso cuando el nombre es engañoso. Por ejemplo, hay un método llamado SendNewCustomerEmailque se utiliza para enviar todo tipo de correos electrónicos, no solo correos electrónicos de nuevos clientes. Tiene un comentario de un desarrollador actual que dice "Tenga en cuenta que este nombre es engañoso", pero nadie ha considerado cambiarlo a algo más genérico y útil, y si lo hago, el gerente me pedirá que explique por qué Estoy cambiando el código que no necesita ser cambiado en lugar de agregar valor.
Wayne Molina
3

Creo que es posible que deba preguntarse si la notación húngara está afectando o no su producción / calidad personal, o si está afectando más su ego. Por ego, quiero decir que las cosas generalmente funcionan bien, pero nunca querrás que alguien a quien respetes desde afuera vea el código vergonzosamente desactualizado. Si bien creo que esa preocupación tiene sus propios méritos, debe sopesarla con el impacto de calidad / productividad que recibirían todos los que tuvieran que cambiar.

Esta es una especie de cuestión de deuda técnica, ya que está claro que este estilo húngaro no tiene sentido en .Net (con la excepción de las interfaces con "I", pero eso es para otro momento), sin embargo, este podría ser el tipo de deuda técnica con la que su equipo puede vivir hasta que se desvanezca naturalmente .

Morgan Herlocker
fuente
44
Ni siquiera me importa el prefijo "I", y solo lo uso porque evita tener el enigma de Java de, por ejemplo, un nombre interconectado CustomerRepositoryy la clase siendo CustomerRepositoryImplo similar.
Wayne Molina
3
+1 - Parece que debería haber una mejor manera. De vez en cuando uso "Luz húngara", pero los prefijos siempre están relacionados con el negocio, no con el tipo. Por ejemplo, todo en Contabilidad tiene un lado AP y un lado AR, y a menudo tienen el mismo nombre, como Factura. Tener una factura AR y una factura AP me parece perfectamente razonable. El húngaro no es TODO malo TODO el tiempo.
Morgan Herlocker
@Wayne M Es posible que desee ver programmers.stackexchange.com/questions/75956/…
Gary Rowe
Realmente no consideraría esa "notación húngara" porque, como dijiste, es un significado comercial con una abreviatura bien definida que la gente conoce, en la misma línea de tener un código que usa el prefijo XML en Xmllugar de ExtensibleMarkupLanguage. En un módulo de contabilidad, esperaría ver objetos de factura como arInvoicey apInvoiceque transmiten el contexto comercial, pero ver objArInvoiceo oApInvoicees simplemente una OMI tonta. Supongo que podría ser peor, podría ser clsApInvoicepara el nombre
Wayne Molina,
1
@ironcode: Eso es en realidad lo que se llama notación húngara de aplicaciones, en comparación con la notación húngara de sistemas, y es mucho mejor. Lamentablemente, la mayoría de la gente está utilizando los Sistemas. en.wikipedia.org/wiki/…
Miki Watts
2

El mejor argumento en contra de la notación húngara, además de los IDEs modernos, que tienen muchos métodos para mostrar el tipo, la visibilidad y más cosas de una variable con el color, con símbolos pequeños y con textos de información sobre herramientas mientras se pasa la aspiradora, es tomarlo en serio.

  • Fomentar más distinción (b) ool (f) loat (c) har (l) ong (s) hort (conflictos con String? No: (S) tring), (v) oid.
  • Fomentar la codificación de la visibilidad. Soy de Javaland, y espero que también se ajuste a .net: (pri) vate, (pub) blic, (pro) tected (def) ault deberían ser utilizados.
  • .net tiene final / const? ¡Hazlo un prefijo! ¿Escucho 'volátil'?
  • ¿Por qué int y long necesitan un prefijo, pero diferentes objetos no? Eso no es lógico. Crea una abreviatura.tab. donde cada nuevo objeto obtiene una abreviatura distinta.
  • Las variables que pueden ser nulas y similares, que nunca deberían ser nulas, también pueden tener el prefijo. Las personas inteligentes ponen todo el DbC en el prefijo de una variable.

En serio: al refactorizar, puede cambiar una variable de int a long, de String a char. No debería necesitar cambiar el nombre también.

En IDEs, obtienes los nombres a menudo ordenados en un cuadro al lado. ordenado por nombre, donde es fácil de encontrar. Si la mayoría de las variables comienzan con o o i, es molesto para los ojos llegar a la parte significativa del nombre.

Los caracteres adicionales perturban la semántica de la variable. Un entero 'sano' obtiene 'i_sane', que se parece más a 'loco'.

La notación húngara fue útil en los idiomas, que carecen de un sistema de tipos. No lo necesita, si el compilador aplica tipos específicos. Si decoras tu lamento sobre la notación húngara con un empático 'sí, para los programadores mayores, ¡tenía sentido en el pasado usarlo!', Esos programadores mayores pueden ser vanidosos y prefieren no ser identificados como viejos.

Pero hay que tener cuidado, para que la técnica funcione. Tal vez puedas bajar la voz cuando hables de 'programadores mayores', para que se sientan, cuán cuidadoso eres con ellos, cuánto necesitan el cuidado. Para que una tercera persona en la sala reconozca que estás tratando de ocultar algo, lo que por supuesto despertará su curiosidad.

usuario desconocido
fuente
Lamentablemente, también lo he visto eSomeEnumusado en lugares; Afortunadamente no a menudo.
Wayne Molina
2

Compre una copia de las Directrices de diseño de Framework y suéltela en el escritorio de su gerente (o quien controle el estilo de codificación). Asegúrese de poner una nota en él que señale claramente la introducción, donde destacan la importancia de la coherencia. Para llegar más lejos a casa, obtenga una copia de Clean Code y ponga un marcador allí en la sección sobre convenciones de codificación.

Michael Brown
fuente
1

En algunos aspectos, este es un tema subjetivo, y es uno de esos debates de minutas de programación (¿ortografía?) Que entretengo por un tiempo y luego evito. Si bien creo que la notación húngara es un pecado que debe ser desterrado, creo que la coherencia es más importante.

En ese sentido, haré todo lo posible para convencer a un equipo de que use nombres de variables centrados en el dominio en lugar de convenciones de nombres basadas en tipos, pero si todo se vuelve difícil, retrocederé para aceptar un estándar de nombres que todos deben cumplir en Una base de código común.

No estoy a favor de algún estándar genéricamente obligatorio impuesto por un grupo de estándares, pero que los equipos de software desarrollen su propio estándar y, lo que es más importante, lo cumplan.

rupjones
fuente
1

Con el cambio de nombre, las variables de cambio de nombre son tan rápidas que puedo deshacer las convenciones de nomenclatura consideradas tan rápido que no tengo que abandonar el antiguo puesto de convenciones con encabezado incorrecto.

Si no tiene herramientas de refactorización, entonces, estoy de acuerdo con los otros comentaristas que han sugerido seguir la convención existente de la base de código tanto como pueda, incluso si fue errónea. (hasta cierto punto, existen convenciones de nombres variables que se convertirán en generadores de errores si los deja)

MatthewMartin
fuente
0

La mayoría de sus inquietudes son válidas y facilitarían la vida de un nuevo desarrollador y probablemente su cordura. La única convención que todos deben adoptar es nombres descriptivos. Debería poder llegar a un consenso sobre eso sin cambiar drásticamente los estilos dependiendo de cuán malos sean. Para todo lo demás, espere hasta que esté a cargo o reemplace a los miembros actuales con desarrolladores nuevos que piensen y sientan como usted.

JeffO
fuente
0

Mis desviaciones:

  • _PublicPropertyBacker
  • _private_property_backer
  • _privateMember
  • CONSTANT_MEMBER
  • función privada
  • param_
  • Botón privado okBU; // etc. límite de 3 caracteres
  • struct SOMESTRUCT // para estructuras pinvoke

Regiones de código genérico y diseño de archivo:

  • Miembros
    • (privado | interno | protegido | público) X [estático] X [const / readonly]
  • Propiedades
    • (privado | interno | protegido | público) X [estático] X [solo lectura]
  • Constructores
    • (privado | interno | protegido | público) X [estática]
  • Comandos // cualquier cosa con devolución nula o devolución de estado
    • (público | protegido | interno | privado) X [estática]
  • Manejadores de eventos / privados /
    • (Control | Remoto | Servicio | Otros) Eventos
  • Funciones // consulta el estado, no debería tener efectos secundarios
    • (público | protegido | interno | privado) X [estática]
marca
fuente