Uso de guiones bajos en variables Java y nombres de métodos [cerrado]


Incluso hoy en día a menudo veo guiones bajos en variables y métodos Java, un ejemplo son variables miembro (como "m_count" o "_count"). Que yo recuerde, usar guiones bajos en estos casos es llamado bad style por Sun.

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

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

Author: SCdF, 2008-09-29

15 answers

Si no tienes código usándolo ahora, te sugiero que continúes con eso. Si su base de código lo usa, continúe con eso.

Lo más importante sobre el estilo de codificación es consistencia. Si no tiene nada con lo que ser consistente, entonces las recomendaciones del proveedor de idiomas son probablemente un buen lugar para comenzar.

 136
Author: Tanktalus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-29 19:17:43
sunDoesNotRecommendUnderscoresBecauseJavaVariableAndFunctionNamesTendToBeLongEnoughAsItIs();

as_others_have_said_consistency_is_the_important_thing_here_so_chose_whatever_you_think_is_more_readable();
 103
Author: Anders Sandvig,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-29 19:41:39

Reglas:

  1. Haz lo que hace el código que estás editando
  2. Si no se aplica #1, use camelCase, sin guiones bajos
 37
Author: davetron5000,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-29 19:19:46

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

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

Mi el 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 ámbito de variables. Así que no puedes reutilizar _ para global o estático y en su lugar elijo g_ y s_ respectivamente.

 31
Author: JaredPar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-29 23:05:35

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

Para responder a tu pregunta: Utilizo un subrayado inicial para marcar variables privadas. Lo encuentro claro y puedo escanear el código rápidamente y averiguar qué está pasando.

(Aunque casi nunca uso "esto", excepto para evitar un choque de nombres.)

 7
Author: Christophe Herreman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-29 19:21:25

El uso de 'm_' o '_' en el frente de una variable hace que sea más fácil detectar variables miembro en métodos a través de un objeto.

Como beneficio secundario, escribir ' m_ ' o ' _ ' hará que intellsense los muestre primero;)

 6
Author: Nicholas Mancuso,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-29 19:18:35
  • Resulta que me gustan los guiones bajos iniciales para las variables de instancia (privadas), parece más fácil de leer y distinguir.Por supuesto, esto puede meterte en problemas con los casos extremos (por ejemplo, las variables de instancia públicas (no son comunes, lo sé) - de cualquier manera que los nombre que se podría decir que está rompiendo su convención de nomenclatura:
  • private int _my_int; public int myInt;? _my_int? )

- por mucho que me guste el _style de esto y creo que es legible, creo que es posiblemente más problemático de lo que vale, ya que es poco común y probablemente no para que coincida con cualquier otra cosa en el código base que está utilizando.

-la generación automatizada de código (por ejemplo, los getters de generación de eclipse, los setters) no es probable que entiendan esto, por lo que tendrá que arreglarlo a mano o muck con eclipse lo suficiente como para que lo reconozca.

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

 5
Author: Steve B.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-29 20:25:41

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

 4
Author: Fry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-29 20:06:32

Hay una razón por la que usar guiones bajos se consideraba un mal estilo en los viejos tiempos. Cuando un compilador de tiempo de ejecución era algo inasequible y los monitores venían con una asombrosa resolución de 320x240 píxeles, a menudo no era fácil diferenciar entre _name y __name.

 4
Author: Vladimir Miller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-10 21:19:14

Es una mezcla de estilos de codificación. Una escuela de pensamiento es el prefacio de los miembros privados con un subrayado para distinguirlos.

setBar( int bar)
{
   _bar = bar;
}

En lugar de

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

Otros usarán guiones bajos para indicar una variable local temporal que saldrá del ámbito 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á AHÍ! así que sé que va fuera de alcance) Editar: Dios no permita que un programador de esta escuela y un programador desde la escuela memberData colaboramos! Sería un infierno.

A veces, el código generado precede a las variables con _ o __. La idea es que ningún humano haría esto, así que es seguro.

 3
Author: Chris Cudmore,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-29 19:20:35

Aquí hay un enlace a las recomendaciones de Sun para Java. No es que tengas que usar estos o incluso que su código de biblioteca siga a todos ellos, pero es un buen comienzo si vas desde cero. Herramientas como Eclipse han incorporado formateadores y herramientas de limpieza que pueden ayudarlo a ajustarse a estas convenciones (u otras que defina).

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

 3
Author: Matt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-05 17:26:25

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

Sin duda el código que has visto fue 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...

 2
Author: Joe Ratzer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-29 19:20:51

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

public class TestClass {
  int var1;

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

Si hicieras la variable miembro _var1 o m_var1, no tendrías la ambigüedad en la función.

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

 2
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-29 19:34:11

Personalmente, creo que un lenguaje no debería hacer reglas sobre el estilo de codificación. Es una cuestión de preferencias, uso, conveniencia, concepto sobre legibilidad.
Ahora, un proyecto debe establecer reglas de codificación, para la coherencia entre los listados. Es posible que no estés de acuerdo con estas reglas, pero debes atenerte a ellas si quieres contribuir (o trabajar en equipo).

Al menos, los IDEs como Eclispe son agnósticos, lo que permite establecer reglas como prefijos o sufijos variables, varios estilos de colocación de la abrazadera y administración del espacio, etc. Así que puedes usarlo para reformatear código a lo largo de tus pautas.

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

 1
Author: PhiLho,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-29 19:54:12

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

 0
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-17 03:21:47