2009-01-07 11 views
6

me encontré con esta declaración es cierto código viejo y me tomó un segundo para averiguar ...se establece un valor booleano en base a un número entero

IsTestActive = (TestStateID == 1 ? true : false); 

Por favor, corríjanme si me equivoco, pero no es ¿Esto es lo mismo que este ?:

IsTestActive = (TestStateID == 1); 

Si es así, ¿por qué querrías utilizar el primero? ¿Cuál es más legible? (Creo que esto último, pero me gustaría ver lo que otros piensan).

Respuesta

32

Sí, es exactamente lo mismo.

Sí, este último es más legible.

+2

Sólo he visto la antigua utilizada por 2 clases de personas: los que falta una comprensión fundamental de la lógica booleana, o aquellos que piensan que el operador ternario es realmente genial. –

+1

El primero teóricamente tendría un minuto de éxito, aunque si te preocupas por ese nivel de rendimiento entonces sospecho que tienes problemas mayores ... –

5
IsTestActive = (TestStateID == 1); 

es definitivamente sea más legible.

Usted podría hacer un caso para definir una constante

ACTIVE = 1 

volviendo a poner la variable booleana IsTestActive con

(TestStateID == ACTIVE) 

La forma en que el código es ahora, el estado del booleano IsTestActive se Sería erróneo si el estado de TestStateID cambia sin actualizar el booleano. Omitir el booleano y probar la fuente real de la información que está buscando eliminará la posibilidad de este error.

+1

buen punto, odio los enteros mágicos, pero supongo que el OP solo estaba publicando un ejemplo código – annakata

+0

Eso puede ser, pero sí veo mucha gente usando variables temporales como esta en el código de producción. –

0

La legibilidad depende del lugar donde utilice esta construcción. A menudo encuentro algo como

(TestStateID == 1 ? true : false) 

más legible.

0

Bueno, no sé acerca de otros idiomas, pero en el PHP es aún más fácil, utilizando el tipo de fundición:

$IsTestActive = (boolean)$TestStateId; 
Cuestiones relacionadas