2010-02-21 20 views
5

me he dado cuenta de que mucha gente hacer en emisores de Java:emisores de Java y "este"

1)

public void setX(int x) { 
    this.x = x; 
} 

Personalmente no me gusta esto y creo que debe ser algo como:

2)

public void setX(int newX) { 
    x = newX; 
} 

¿hay alguna razón la primera sería mejor?

No es 1) más fácil cometer un error con. En unas cuantas ocasiones he rastreado errores en el código de abajo a la gente que hace:

x = x; 

por error, tal vez porque estaban escribiendo para ayunar y sólo quería conseguir los captadores y definidores fuera del camino.

+1

Prefiero la primera opción también. Sin embargo, no estoy seguro de por qué esto está siendo downvoted. – Jorn

+3

Eclipse usa automáticamente el estilo this.x = x al generar getters y setters. Esa podría ser la razón por la que tantas personas usan ese estilo. – chama

+0

Prefiero la segunda forma, no siempre usando 'newX' como nombre de argumento, pero' this.x = x; 'es una forma de ocultar variables y por lo tanto algo que no usaría. – rsp

Respuesta

14

Es una cuestión de estilo. El argumento a favor de

public void setX(int x) { this.x = x; } 

es que usted no tenga que pensar en un nombre nuevo y significativo para el argumento de entrada, puesto que ya tiene uno.

Elija un estilo y úselo consistentemente.

+2

Y si ya se ha elegido un estilo, quédese con eso. – reccles

4

No creo que haya un "mejor" o "peor" aquí. Es solo una cuestión de estilo.

+0

No es el primero más fácil de hacer un error con. En algunas ocasiones, he rastreado errores en el código a personas que hacen: x = x; por error, tal vez porque estaban escribiendo rápido y solo querían sacar a los getters y setters :) – Zubair

+6

¿Quién tipos getters y setters? Todos los IDE valiosos los generarán para usted. Si "tecleas demasiado rápido", todos los IDE válidos te dirán de inmediato que "x = x" es incorrecto. – duffymo

+0

¿Por qué estás escribiendo tus setters simples solo de todos modos? Ejecute eclipse, haga clic, haga clic, listo. – viraptor

7

razones para preferir this.x = x:

  1. usando this.x = x en los constructores y es un patrón conocido, que reconocen los programadores de Java.
  2. El x tanto en el campo como en el parámetro representan el mismo valor.
  3. Con x = newX no hay indicación sintáctica de que uno sea un campo y el otro un parámetro.
1

Supongo que los generadores son generados automáticamente por el IDE. Entonces mi preferencia es el formulario que se usa por defecto en el IDE. Es decir, soy bastante neutral y creo que no merece cambiar la configuración IDE predeterminada.

2

Prefiero this.x = x;. Realmente no hay una forma correcta de hacerlo. En un IDE, se verá bien para el color adicional en this.

+1

+1 por colores! – bharal

3

Es solo una convención de codificación. Usted es libre de elegir, pero úselo consitentemente. Además, un IDE promedio puede autogenerar todos los getters/setters en unas pocas pulsaciones de teclas/clics. En Eclipse, por ejemplo, hacer Alt +Shift +R y luego S y luego seleccione las propiedades que desea generar getters/setters para y haga clic en OK. Además, un IDE promedio mostrará una advertencia cuando lo haga x = x en lugar de this.x = x.

Yo prefiero el this.x = x.Eclipse y muchas herramientas de ingeniería inversa (como Dali e Hibernate Tools) también lo generan de forma predeterminada.

La convención x = newX (Hungarian notation) se acaba de heredar del mundo de la programación procedural (anticuada) y simplemente no encaja bien en la ideología de OO.

+0

¿Las herramientas de ingeniería inversa requieren "this.x = x" para ser utilizadas? – Zubair

+0

No, es solo una convención estándar que cumplen. – BalusC

+0

Sí, es su derecho. Supongo que crecí en Microsoft C y C++, y la notación húngara fue una de esas cosas de las que nunca crecí, pero tal vez debería haber :) – Zubair

2

Si es su propio código o no forma parte de una base existente, elija la que más le guste y quédese con ella. Sin embargo, si está trabajando con el código existente, siga la convención que ya esté siendo utilizada.

+0

Sí, estoy de acuerdo, la convención es más importante a veces – Zubair

3

Es totalmente subjetiva, pero la primera forma proporciona un buen prototipo método claro en javadoc etc.

no me siento que hay mucho margen para el error utilizando el formulario 'this.x = x'. Ciertamente nada que no quede atrapado por pruebas unitarias. Usted tiene pruebas unitarias, ¿verdad?

+0

Tengo pruebas unitarias sí , y siempre escríbalos, pero te sorprendería saber cuántos proyectos he realizado y apenas tienen cobertura de código en sus pruebas unitarias. – Zubair

+0

Sí. Usar un nombre funky para el parámetro (como newX o pX) solo hace que los JavaDocs se vean mal. –

Cuestiones relacionadas