2011-01-22 110 views
5

Una pregunta que tuve en mente cuando programé con Swing en Java fue, ¿es una recomendación o una convención de nomenclatura "oficial"/más utilizada en componentes Swing?Convención de nombre sobre componentes Java Swing (prefijo)

tales como (a pesar de que otros pueden preferir otras convenciones de nomenclatura esto es lo que estoy utilizando actualmente):

  • txt para JTextField
  • btn para JButton
  • LBL para JLabel
  • PNL para JPanel

Pero entonces mi lista termina ..

Creo que tales prefijos mejoran la legibilidad en mi código, pero no tengo nombres para componentes como JComboBox, JList, JRadioButton, JCheckButton y la lista continúa.

Gracias de antemano.

+0

No existe una convención de nombres "oficial" para Swing. –

+0

Huele a notación húngara –

Respuesta

18

La gente le dirá que usar prefijos es malo, porque esa es la notación húngara y, actualmente, la notación húngara se considera un gran no-no en la programación. Personalmente, como alguien que ha hecho una cierta cantidad de trabajo en GUI, puedo decir que, mientras que la notación húngara definitivamente debe evitarse en la programación sin GUI, al hacer GUI es una muy buena práctica.

Considere, por ejemplo, un formulario simple con un cuadro de texto que se utilizará para ingresar el nombre del usuario. Delante de este cuadro de texto debe haber una etiqueta que le pide al usuario que ingrese su nombre en el cuadro de texto. Ahora, ¿cómo vas a nombrar el cuadro de texto? 'Nombre'? ¿Qué pasa con la etiqueta? Una buena práctica debe ser el prefijo del cuadro de texto con txt y la etiqueta con la etiqueta, que es de lo que se trata la notación húngara. Por lo tanto, el cuadro de texto ahora se llama 'txtName' y la etiqueta correspondiente se llama 'lblName'.Esto le brinda la ventaja adicional de acceder fácilmente a sus cuadros de texto, cuadros combinados y otros widgets cuando está en el editor de su IDE. Por ejemplo, al escribir 'txt' y presionar CTRL + Espacio en Eclipse, se abre un menú contextual que enumera todos sus cuadros de texto, si sigue esta notación.

Ahora, para responder a su pregunta. La forma habitual de definir qué tres letras debe usar para un prefijo es eliminar todas las vocales del nombre del widget y también todas las consonantes que se repiten. Si quedan más de tres consonantes, deben ignorarse. Por lo tanto, un cuadro de texto (o TextField, o lo que sea que se llame este widget en su kit de herramientas preferido) se convierte en 'txt', una etiqueta 'lbl', un cuadro combinado 'cmb', una tabla 'tbl', etc.

+0

Entonces, ¿usaría "chc" para JCheckButton? Pregunto, ya que tal vez prefiera "chb", de lo contrario nunca sabría lo que significa. Para otros componentes que puedo pensar, debería funcionar bien. – maaartinus

+0

Tengo que estar de acuerdo. Los componentes de Gui son las únicas variables que obtienen un tratamiento de btn_XXX, pnl_XXX, chk_XXX. Por un lado, me ayuda a separar visualmente los valores de GUI de los vars de estado/datos. Pero ... por las razones mencionadas por Duffy, me siento un poco sucio haciéndolo. –

+0

No estoy seguro de por qué alguien rechazaría una respuesta de opinión a una pregunta subjetiva. –

7

Normalmente odio este tipo de cosas, porque huele a notación húngara. No me gusta la idea de incrustar el tipo en el nombre de la variable, porque si cambia los tipos, no debería exigir el cambio de todos los nombres de las variables.

Pero en el caso de Swing, supongo que es aceptable.

Un buen IDE generará nombres de variables para usted. ¿Por qué no lo dejas? También me gustaría deletrear el tipo si insiste (por ejemplo, submitButton en lugar de btnSubmit). Las pulsaciones de teclas son baratas.

+0

Sí, tienes algunos puntos buenos que llevaré conmigo, ¡gracias! – LuckyLuke

4

¿Por qué no llamar JTextField textField, JButton button, JLabel label y JPanel panel. ¿Es tan malo gastar algunos caracteres adicionales para hacer que la variable se lea como una palabra en inglés?

Además, cuando pongo el tipo en el nombre de la variable, lo pongo al final. Entonces, un JLabel que muestra un nombre es nameLabel (que IMO es más legible que lblName).

Y aún más, siguiendo el consejo de duffymo, es una mala práctica poner el tipo en el nombre de la variable. Un mejor enfoque es describir lo que es la variable. En el caso de una etiqueta de nombre, es un componente de interfaz de usuario que muestra el nombre. Entonces, un nombre mejor podría ser nameComponent. El hecho de que nameComponent sea un JLabel o algún otro tipo es secundario y no debe saturar el nombre de la variable.

+0

Consulte mi respuesta sobre por qué usar un prefijo es mejor que usar un sufijo (poner el tipo en el extremo). – Sandman

+1

@Sandman No ha dicho nada sobre el sufijo en su respuesta. Lo que señala es que usar el prefijo es mejor que no usarlo en absoluto. Pero puedo decir lo mismo sobre el sufijo. Ejemplo: 'nameTextField' y' nameLabel'. –

+0

@Andrew Claro, podrías usar un sufijo. Sin embargo, lea las últimas dos oraciones en el segundo párrafo de mi respuesta donde explico los beneficios de usar un prefijo sobre el sufijo. – Sandman

Cuestiones relacionadas