2008-09-29 25 views
75

Incluso hoy en día, a menudo veo guiones bajos en variables y métodos Java; un ejemplo son las variables miembro (como "m_count" o "_count"). Por lo que recuerdo, el uso de guiones bajos en estos casos se llama mal estilo por Sun.Uso de guiones bajos en variables Java y nombres de métodos

El único lugar donde deben usarse es en constantes (como en "static final static int IS_OKAY = 1;"), porque las constantes deben ser todas mayúsculas y no camel case. Aquí, el guión bajo debe hacer que el código sea más legible.

¿Cree que usar guiones bajos en Java es un mal estilo? Si es así (o no), ¿por qué?

Respuesta

134

Si no tiene código para usarlo ahora, le sugiero que continúe. Si su código base lo usa, continúe así.

Lo más importante acerca del estilo de codificación es consistencia. Si no tiene nada con que ser consecuente, entonces las recomendaciones del proveedor del idioma probablemente sean un buen lugar para comenzar.

+2

Usamos convenciones de codificación sin usar guiones bajos. De todos modos, mirando los marcos y el código anterior, a menudo veía subrayados. La pregunta de si la coherencia gobierna sobre la convención es claramente respondida por consistencia, pero no es el punto en el que pensé al hacer la pregunta. – Georgi

+1

El uso continuo del carácter '_' sería una mala práctica. Esta forma de trabajar introduce un costo de mantenimiento adicional y debería informar estas convenciones excepcionales a cada nuevo desarrollador que se una al equipo. – Halil

+1

esto es como nombrar interfaces de esta manera: 'ReadableInterface' - absolutamente redundante. En los IDEs modernos, no es necesario especificar el tipo de variable o su rango: colorear y saltar rápidamente hace todo el trabajo por usted. Por lo tanto, IMO es un mal estilo ya que escribe caracteres redundantes y obliga a las personas a leerlo/mantenerlo. – kiedysktos

5

usando 'm_' o '_' al frente de una variable hace que sea más fácil detectar las variables de los miembros en los métodos de un objeto.

Como beneficio adicional escribiendo 'm_' o '_' hará intellsense hacerlas explotar primero;)

+5

Si está programando Java, lo más probable es que tenga un IDE que coloree las variables de sus miembros en un color diferente. "m_" es simplemente desagradable. – JeeBee

+0

Prefiero "its" como se lee bien: 'if (itsEmail.equals (email))' – davetron5000

+5

Prefiero esto. para los nombres de los miembros. Absolutamente inconfundible. –

37

Reglas:

  1. hacer lo que el código está editando hace
  2. Si # 1 no aplica, use camelCase, sin guiones bajos
3

Es una mezcla de estilos de codificación. Una escuela de pensamiento es preceder a los miembros privados con un guión bajo para distinguirlos.

setBar(int bar) 
{ 
    _bar = bar; 
} 

en lugar de

setBar(int bar) 
{ 
    this.bar = bar; 
} 

los demás pueden utilizar guiones para indicar una variable local temporal que irá fuera de alcance al final de la llamada al método. (Me parece bastante inútil, un buen método no debería ser tan largo, y la declaración está CORRECTA, así que sé que está fuera de alcance) Editar: Dios no permita que un programador de esta escuela y un programador de la escuela MemberData colaboren ! Sería un infierno.

A veces, el código generado presentará variables con _ o __. La idea es que ningún ser humano haría esto alguna vez, por lo que es seguro.

+0

En su caso, uso lo siguiente: setBar (int aBar) { bar = aBar; } Legible, sin esto. o _bar ... – Georgi

+0

Eso es justo, pero luego aBar aparece en la firma del método en la API, y creo que se ve complicado. –

+1

En realidad me encontré con un caso en el que el código autogenerado coincidía con una de las palabras clave del idioma, por lo que la mejor manera de evitar esto era anteponer _ al principio. –

2

Creo que cualquier estilo que rompa las pautas de estilo de un idioma (sin la debida razón) es feo y, por lo tanto, "malo".

Sin duda, el código que ha visto ha sido escrito por alguien que solía trabajar en un lenguaje donde los guiones bajos eran aceptables.

Algunas personas simplemente no pueden adaptarse a nuevos estilos de codificación ...

+0

En general, estoy de acuerdo con la filosofía de "hacer lo que otros hacen" al codificar, pero no como un absoluto. Creo que hay un argumento muy fuerte que, dadas las longitudes razonables de los identificadores, snake_cased_variables es más fácil de leer que CamelCasedVariables. Mi justificación es que reducir la carga cognitiva visualmente es algo pequeño, pero aún útil. Las personas aprecian el espacio en blanco en el código, cuando leen documentos y escuchan música. El caso de Camel, creo, es una afrenta al espacio en blanco en nombre de la "eficiencia". Eficiencia para quien? –

7

"estilo malo" es muy subjetiva. Si ciertas convenciones funcionan para usted y su equipo, creo que calificará un estilo malo/bueno.

Para responder a su pregunta: uso un guion bajo para marcar las variables privadas. Lo encuentro claro y puedo escanear rápidamente el código y descubrir qué está pasando.

(casi nunca usan "este", aunque, excepto para evitar un conflicto de nombres.)

+0

Como dijo, el estilo es muy subjetivo. Tiendo a usar 'this' bastante liberalmente para indicar una variable miembro si creo que se debe llamar la atención. Sin embargo, no soy un fanático al respecto. –

2

La razón la gente lo hace (en mi experiencia) es diferenciar entre las variables miembro y parámetros de función. En Java se puede tener una clase como esta:

public class TestClass { 
    int var1; 

    public void func1(int var1) { 
    System.out.println("Which one is it?: " + var1); 
    } 
}

Si ha realizado la _var1 variable miembro o m_var1, no tendría la ambigüedad de la función.

Así que es un estilo, y yo no lo llamaría malo.

+0

En este escenario, generalmente cambio el nombre del parámetro como "aVar1".Por contraste con "el var1". –

98
sunDoesNotRecommendUnderscoresBecauseJavaVariableAndFunctionNamesTendToBeLongEnoughAsItIs(); 

as_others_have_said_consistency_is_the_important_thing_here_so_chose_whatever_you_think_is_more_readable();
+0

La pregunta de si la coherencia gobierna sobre la convención debe ser claramente respondida por consistencia, pero no es el punto en el que pensé al hacer la pregunta. De todos modos, hay veces que deberías dejar huellas viejas, ¿eh? – Georgi

+2

Si ya se usa una convención de nomenclatura "conflictiva", creo que depende de la cantidad de código de la que estamos hablando. No recomendaría volver a escribir miles de líneas de código para pasar de la convención antigua a la nueva convención, dado que la vieja convención se usa de manera consistente. –

1

personalmente, creo que una lengua no debe hacer reglas sobre el estilo de codificación. Es una cuestión de preferencias, uso, conveniencia, concepto de legibilidad.
Ahora, un proyecto debe establecer las reglas de codificación, para la coherencia entre las listas. Puede que no esté de acuerdo con estas reglas, pero debe cumplirlas si quiere contribuir (o trabajar en equipo).

Al menos, entornos de desarrollo como son Eclispe agnóstico, lo que permite establecer reglas como prefijos o sufijos variables, varios estilos de colocación de corsé y la gestión del espacio, etc Por lo tanto se puede usar para cambiar el formato de código junto sus directrices.

Nota: Estoy entre los que mantienen sus viejos hábitos de C/C++, codificando Java con m_ prefijos para variables miembro (y s_ para estáticos), prefijando booleanos con una inicial b, usando una letra mayúscula inicial para nombres de funciones y alinear llaves ... ¡El horror para los fundamentalistas de Java! ;-)
Curiosamente, esas son las convenciones que uso donde trabajo ... ¡probablemente porque el principal desarrollador inicial proviene del mundo de MFC! :-D

3

Aquí hay un link a las recomendaciones de Sun para Java. No es que tenga que usar estos o incluso que su código de biblioteca los siga a todos, pero es un buen comienzo si va desde cero. Herramienta como Eclipse ha incorporado formateadores y herramientas de limpieza que pueden ayudarlo a cumplir con estas convenciones (u otras que defina).

Para mí, '_' son demasiado difíciles de escribir :)

4

Es bueno tener algo de distinguir privadas, frente a las variables públicas, pero no me gusta '_' en la codificación general. Si puedo ayudarlo con el nuevo código, evito su uso.

5
  • resulta que como líder de guiones para las variables de instancia (privada), parece más fácil de leer y distinguish.Of supuesto esto puede tener problemas con casos extremos (por ejemplo, variables de instancia públicas (no es común, lo sé) - de cualquier manera que las nombre que estés podría decirse que la fractura de su convención de nomenclatura:
  • private int _my_int; public int myInt;? _my_int?)

-como mucho que me gusta el _style de esto y creo que es legible me parece que es sin duda más problemas de lo que vale la pena, ya que es poco común y es probable que no coincida con nada más en la base de código que está usando.

-generación de código automatizado (p. eclipses generan getters, setters) no es probable que entienda esto, así que tendrás que arreglarlo a mano o ensuciar con eclipse lo suficiente como para que lo reconozca.

En última instancia, vas contra el resto de las preferencias del mundo (java) y es probable que tengas algunas molestias por eso. Y como han mencionado los carteles anteriores, la coherencia en la base de código supera a todos los problemas anteriores.

+3

Configurar Eclipse para comprender sus preferencias de prefijo (o sufijo) es bastante directo. En _Preferencias-> Java-> Estilo de código_ hay una tabla donde puede establecer las convenciones de nombre de variable para campos, campos estáticos, campos finales estáticos, parámetros y variables locales. Todos los generadores de código parecen respetar estas configuraciones. – metasim

31

No creo que usar _ o m_ para indicar que las variables de miembro es malo en Java o en cualquier otro idioma. En mi opinión, mejora la legibilidad de su código porque le permite ver un fragmento e identificar rápidamente todas las variables miembro de los locales.

También puede lograr esto forzando a los usuarios a anteponer variables de instancia con "esto", pero esto me parece un poco draconiano. En muchos sentidos, viola DRY porque es una variable de instancia, por qué calificarla dos veces.

Mi propio estilo personal es usar m_ en lugar de _. La razón es que también hay variables globales y estáticas. La ventaja de m _/_ es que distingue un alcance de variables. Entonces no puedes reutilizar _ para global o estático y en su lugar elijo g_ y s_ respectivamente.

+1

Esta pregunta se trataba de preguntar acerca de los guiones bajos de Java en general, no sobre preguntar solo a las variables miembro (aunque esto fue un ejemplo en la pregunta). – Georgi

+8

¿Me marcó para comentar un subconjunto de la pregunta? Parece un poco extremo – JaredPar

+1

@JaredPar - usted es el único que da una buena sugerencia de estilo alternativo. +1 por eso. – djangofan

0

es solo tu propio estilo, nada un código de estilo malo, y nada es un buen código de estilo, solo diferencia nuestro código con los demás.

3

Hay una razón por la cual el uso de caracteres de subrayado se consideraba un mal estilo en los viejos tiempos. Cuando un compilador en tiempo de ejecución era algo inaccesible y los monitores llegaban con una asombrosa resolución de 320x240 píxeles, a menudo no era fácil diferenciar entre _name y __name.

+0

Es por eso que OCaml nunca funcionaría en máquinas viejas. –

Cuestiones relacionadas