2008-11-19 11 views
6

¿Cuál es la diferencia entreDiferencia nulo

if(null==object) 

y

if(object==null) 

Por favor, dar la ventaja para el uso de los anteriores.

Respuesta

12

La diferencia viene si accidentalmente escribe = en lugar de ==:

if (null = object) - Compilador de error
if (object = null) - Bug!

+0

En C# usando el operador de asignación en lugar del resultado booleano hay un error de tiempo de compilación. – Pradeep

+0

que es bueno saber ... pero la pregunta no estaba originalmente marcada como 'C#': D – warren

+0

De hecho ... He eliminado la etiqueta – Greg

3

Sin diferencia. (null == object) es una práctica de C/C++, donde "=" se usa como operador de asignación y como operador de comparación.

Hubo demasiados errores cuando se utilizó if (object = null).

+0

Ahora, sea valiente, y dígame por qué no votó. –

+0

No tengo conexión con esta publicación, pero ¿por qué alguien acaba de votar? Estoy de acuerdo en que está duplicando las opiniones, pero luego, en lugar de bajar la votación, la persona debería mantenerse tranquila. – Pradeep

+0

porque la respuesta original no fue ni completa ni útil: "Ninguna diferencia" no es suficiente :) – warren

2

Algunos prefieren if (null == object) de modo que si accidentalmente ingresa = en lugar de ==, se obtiene un error de compilación en lugar de una asignación.

+0

... si está usando C o C++, y no tiene advertencias suficientemente altas. –

2

Lógicamente, no hay diferencia.

De un error comprobar punto de vista, la primera es más deseable porque si se olvida de un signo igual (=), el compilador le hará saber que no se puede realizar una asignación a una constante.

0

En muchos idiomas == es el operador de comparación = es el operador de asignación.

Es muy fácil escribir = cuando realmente quieres decir ==.

Por lo tanto, se prefiere la convención de escribir constante == variable.

constante = variable no se compilará mostrando su error.

variable = constante compilará y hará lo incorrecto en el tiempo de ejecución.

4

Bueno, aquí es algo que me gusta ... extensiones de uso:

public static class ObjectExtensions 
{ 
    public static bool IsNull(this object target) 
    { 
     return null == target; 
    } 
} 

Ahora, usted puede olvidarse de él por completo:

if(item.IsNull()) 
+0

No me gusta eso. Creo que está yendo demasiado lejos con las extensiones. Además, no me gusta llamar a los métodos estáticos en las variables miembro. Y luego también requiere una doble inspección ver a alguien llamando a un método sobre una variable que presumiblemente puede ser nula. ... Pero funciona, supongo. – BobbyShaftoe

+0

Entonces, en esencia, simplemente no te gustan los métodos de extensión ... –

6

En los viejos tiempos, los compiladores felizmente le permite hacer asignaciones dentro de condicionales, lo que lleva a errores involuntarios:

if(a = false) 
{ 
    // I'll never execute 
} 
if(b = null) 
{ 
    // I'll never execute 
} 
b.Method(); // And now I'm null! 

Así que algunos desarrollos inteligentes rs comenzó a poner sus constantes primero en sus condicionales:

if(false = a) // OOPS! Compiler error 
{ 
    // .. 
} 
if(null = b) // OOPS! Compiler error 
{ 
    // .. 
} 

De modo que se entrenaron para evitar una clase completa de errores. La mayoría de los compiladores modernos ya no le permitirán cometer ese error, pero la práctica continúa.

Hay otra ventaja para siempre poniendo primero sus constantes:

if(myString != null && myString.Equals("OtherString")) 
{ 
    // ... 
} 

puede (en .NET, Java, y la mayoría de los idiomas con un tipo de cadena basado en objetos) se reducirá a:

if("OtherString".Equals(myString)) 
{ 
    // .. 
} 
Cuestiones relacionadas