En cuanto a la práctica, que es el mejor utilizar la codificación y por qué?
Respuesta simple: utilice siempre las versiones en cortocircuito. Simplemente no hay razón para no hacerlo. Además, hace que su código sea más claro porque expresa su intento : evaluación lógica. Utilizar las operaciones bit a bit (lógicas) implica que solo desea eso: operaciones de bits, no evaluación lógica (aunque MSDN las llama también "operadores lógicos" cuando se aplica a valores booleanos).
Además, dado que un cortocircuito en sólo evalúa lo que se necesita evaluar, a menudo es más rápido, y permite escribir dicho código como
bool nullorempty = str == null || str.Length == 0;
(Tenga en cuenta que para resolver este problema en particular una mejor función ya existe, es decir, string.IsNullOrEmpty
que también usó en su pregunta.) Este código no sería posible con las operaciones lógicas bit a bit porque incluso si str
fuera null
, se evaluaría la segunda expresión, lo que daría como resultado NullReferenceException
.
EDITAR: Si desea efectos secundarios que se producen en un contexto lógico favor todavía no utilizan operaciones bit a bit. Este es un ejemplo típico de ser demasiado inteligente. El próximo mantenedor del código (o incluso usted mismo, después de algunas semanas) verá que este código pensará "hmm, este código se puede borrar para usar operadores condicionales", rompiendo inadvertidamente el código. Lamento a quien sea que esté a cargo de arreglar este error.
En cambio, si usted tiene que confiar en el lateral, efectos, hacerlas explícitas:
bool hasBuzzed = checkMakeBuzz();
bool isFrobbed = checkMakeFrob();
bool result = hasBuzzed || isFrobbed;
sentado, tres líneas en lugar de uno. Pero un código mucho más claro como resultado.
esto es una buena respuesta, pero ¿se puede cambiar los operadores "bit a bit" a "lógico" y "lógico" a "condicional"? Esta es la terminología que usa MSDN. técnicamente ambos son "lógicos" pero las versiones duplicadas también tienen cortocircuitos – Jimmy
"El operador Y condicional (&&) realiza un AND lógico de sus operandos bool, pero solo evalúa su segundo operando si es necesario". "http://msdn.microsoft.com/en-us/library/2a723cdk(VS.71).aspx" – Jimmy
Respuesta perfecta. +1 para discusión de efectos secundarios - acordado, para mantenimiento, siempre explícito. 3 LOCs contra pesadilla de mantenimiento, 3 LOC gana sin problemas. –