Los jóvenes conocen las reglas, pero los viejos conocen las excepciones;)
En el último C#caso, si está tratando con un null-able bool, entonces debe:
bool? x = null;
bool? y = true;
bool? z = false;
if (x == true || y == true || z == true) {
// That was the only way that is reasonably readable that I know of
// to accomplish this expression.
}
Si tristate no es un problema, generalmente no debería haber una razón para comparar algo con true/ True. Sin embargo, en Pythony en varios otros idiomas, como C/C++puede realizar una ifexpresión no bool. Estos lenguajes tienen reglas únicas para interpretar enteros, punteros, listas, etc. como verdaderos o falsos. En algún momento no quieres eso. Por ejemplo, en este fragmento de Python:
x = True
y = 'abcdef'
z1 = x and y
z2 = (x == True) and (y == True)
Aquí zdebería ser True, pero z2debería ser False. Ahora, un Clojurelenguaje se acerca a esto de otra manera: su andfunción no necesariamente se evalúa como a bool, pero la funciónif puede manejar eso.
Independientemente del idioma, cada vez que te encuentres comparando algo Trueo False, probablemente valga la pena comentarlo.
if (some_flag == true)pero lo implícitoif (is_something)oif (has_something). Tenga en cuenta los nombres de las variables.