Pregunta

Lo siento si esta es una pregunta comp-sci 101. No estoy seguro si me falta algo obvio.

Entonces, digamos que alguna entrada del usuario arroja un error, y quiero detectarlo y devolver algunos comentarios. El error será un número, 0 - 8. 0 significa "Sin error". Quiero dar al usuario comentarios muy específicos si el error es 3 (no se permiten números, digamos). Para las otras 7 posibilidades, solo quiero finalizar el script y hacer eco del error.

Estaba resolviendo esto y decidí seguir con esto:

$no_errors (

Lo siento si esta es una pregunta comp-sci 101. No estoy seguro si me falta algo obvio.

Entonces, digamos que alguna entrada del usuario arroja un error, y quiero detectarlo y devolver algunos comentarios. El error será un número, 0 - 8. 0 significa "Sin error". Quiero dar al usuario comentarios muy específicos si el error es 3 (no se permiten números, digamos). Para las otras 7 posibilidades, solo quiero finalizar el script y hacer eco del error.

Estaba resolviendo esto y decidí seguir con esto:

<*>

De todos modos, entonces noté al operador OR en la primera línea y pensé que podría ser mejor / más seguro usar un operador AND. Pero cuanto más contemplo, menos veo una diferencia.

Entonces, la verdadera pregunta es, si desea eliminar dos posibilidades de una variable específica, ¿son AND y OR idénticas, o es una lógica / funcionalmente más óptima?

error != 0 ||

Lo siento si esta es una pregunta comp-sci 101. No estoy seguro si me falta algo obvio.

Entonces, digamos que alguna entrada del usuario arroja un error, y quiero detectarlo y devolver algunos comentarios. El error será un número, 0 - 8. 0 significa "Sin error". Quiero dar al usuario comentarios muy específicos si el error es 3 (no se permiten números, digamos). Para las otras 7 posibilidades, solo quiero finalizar el script y hacer eco del error.

Estaba resolviendo esto y decidí seguir con esto:

<*>

De todos modos, entonces noté al operador OR en la primera línea y pensé que podría ser mejor / más seguro usar un operador AND. Pero cuanto más contemplo, menos veo una diferencia.

Entonces, la verdadera pregunta es, si desea eliminar dos posibilidades de una variable específica, ¿son AND y OR idénticas, o es una lógica / funcionalmente más óptima?

error != 3) ? FALSE : TRUE; if (!$no_errors) echo $error_msg['

Lo siento si esta es una pregunta comp-sci 101. No estoy seguro si me falta algo obvio.

Entonces, digamos que alguna entrada del usuario arroja un error, y quiero detectarlo y devolver algunos comentarios. El error será un número, 0 - 8. 0 significa "Sin error". Quiero dar al usuario comentarios muy específicos si el error es 3 (no se permiten números, digamos). Para las otras 7 posibilidades, solo quiero finalizar el script y hacer eco del error.

Estaba resolviendo esto y decidí seguir con esto:

<*>

De todos modos, entonces noté al operador OR en la primera línea y pensé que podría ser mejor / más seguro usar un operador AND. Pero cuanto más contemplo, menos veo una diferencia.

Entonces, la verdadera pregunta es, si desea eliminar dos posibilidades de una variable específica, ¿son AND y OR idénticas, o es una lógica / funcionalmente más óptima?

error']; $error_3 ($no_errors &&

Lo siento si esta es una pregunta comp-sci 101. No estoy seguro si me falta algo obvio.

Entonces, digamos que alguna entrada del usuario arroja un error, y quiero detectarlo y devolver algunos comentarios. El error será un número, 0 - 8. 0 significa "Sin error". Quiero dar al usuario comentarios muy específicos si el error es 3 (no se permiten números, digamos). Para las otras 7 posibilidades, solo quiero finalizar el script y hacer eco del error.

Estaba resolviendo esto y decidí seguir con esto:

<*>

De todos modos, entonces noté al operador OR en la primera línea y pensé que podría ser mejor / más seguro usar un operador AND. Pero cuanto más contemplo, menos veo una diferencia.

Entonces, la verdadera pregunta es, si desea eliminar dos posibilidades de una variable específica, ¿son AND y OR idénticas, o es una lógica / funcionalmente más óptima?

error == 3) ? TRUE : FALSE; if ($error_3) bunch of stuff happens; else bunch of other stuff;

De todos modos, entonces noté al operador OR en la primera línea y pensé que podría ser mejor / más seguro usar un operador AND. Pero cuanto más contemplo, menos veo una diferencia.

Entonces, la verdadera pregunta es, si desea eliminar dos posibilidades de una variable específica, ¿son AND y OR idénticas, o es una lógica / funcionalmente más óptima?

¿Fue útil?

Solución

lógicamente, los siguientes son idénticos (disculpe mi pseudocódigo)

(! expression_one || ! expression_two) /** this is the same as the one below **/
! (expression_one && expression_two)

Funcionalmente, ¿cuál es más óptimo? Ambos son tan óptimos como el uno al otro. Ambas formas (& amp; & amp; y ||) permiten cortocircuitos si la primera expresión es verdadera (en el caso ||) o falsa (en el caso & amp; & amp;)

Otros consejos

Será mucho más legible si usa una instrucción de cambio:

switch (

Será mucho más legible si usa una instrucción de cambio:

<*>error) { case 0; nothing happens; break; case 3: bunch of stuff happens; break; default: bunch of other stuff; break; }

En primer lugar, creo que recomendaría usar otra forma de identificar errores que no sea usar números mágicos. Son difíciles de mantener, ya que se olvida fácilmente qué '' 3 '' quiso decir. Parece que su lenguaje es PHP, que tiene soporte para excepciones. Recomiendo usarlos en su lugar, puede leer más sobre ellos aquí: http://dk.php.net/ excepciones

En cuanto a los operadores lógicos, en realidad no hay ninguno que se considere "buena práctica". Usa lo que quieras. Si tiene problemas para determinar cuándo su expresión es verdadera / falsa, intente hacer una tabla de verdad: http: // en.wikipedia.org/wiki/Truth_table

En cuanto al rendimiento, tenga en cuenta que la evaluación será perezosa en la mayoría de los idiomas. Usando OR, si la primera condición es verdadera, volverá verdadera sin evaluar la segunda condición. Para AND, devolverá falso si las primeras condiciones son falsas, sin evaluar la segunda.

De lo contrario, el rendimiento de los propios operadores no es realmente diferente. Use lo que sea más legible para usted.

Lo mejor es el que te ayuda a leer el código más rápido. Es la única optimización verdadera que puede hacer aquí, y posiblemente en millones de otros lugares.

Esto parecería más simple de leer:

  if(

Esto parecería más simple de leer:

<*>

Nadie se da cuenta de los microsegundos que puede ganar.

error==3) do stuff; else if(

Esto parecería más simple de leer:

<*>

Nadie se da cuenta de los microsegundos que puede ganar.

error>0) do some other stuff else do normal stuff

Nadie se da cuenta de los microsegundos que puede ganar.

  1. Personalmente, eliminaría el uso de esos números y usaría constantes en su lugar. Además de ser más fáciles de mantener, hacen que la codificación sea mucho más fácil y le permite actualizar los valores mañana, p. Si alguna circunstancia te obliga a cambiar el número de 3, tienes que revisar todo tu código
  2. Como lo sugiere gkrogers, un interruptor mientras se logra lo mismo es mucho más fácil de leer y mantener

Rendimiento sabio Creo que son muy similares (ver publicación de wvanbergen), sin embargo, hay diferencias obvias en el comportamiento. Creo que su publicación actual puede no estar haciendo lo que espera. En la primera línea, si $ _error = 3, tendrá $ no_errors = false. Como está comprobando dos condiciones que ambas deben cumplirse, tal vez una y serían más apropiadas.

A veces encuentro que la forma más fácil de verificar mi lógica es decir lo que quiero en voz alta. Por ejemplo, "No tenemos errores si el código de error es no 0 y no 3 "

Generalmente encuentro que en una situación como esta con solo unas pocas variables, la forma en que escribiría la oración en inglés me proporciona el método más intuitivo (y preciso) para determinar los operadores lógicos.

Si encuentra que el código se ve desordenado después de este proceso, puede encontrar esto enlace sobre las leyes de De Morgan útiles

(A || B) =! (A & amp; & amp; B). Así que realmente no hace la diferencia

EDITAR: (A || B) =! (A & amp; & amp; B) está mal. Gracias por el comentario. La forma correcta es (! A ||! B) =! (A & amp; & amp; B).

Mis disculpas

Si usa:

$no_errors (

Si usa:

<*>

Esto significa que si $ error! = 0 AND $ error! = 3, que es una lógica no válida porque $ error no puede ser == a 3 y 0, puede ser 3 O 0 pero no ambos.
En el ejemplo anterior si $ error = 0 entonces se evaluaría como FALSO porque no es 3 & amp; & amp; 0 estás buscando que sea 3 || 0.

error != 0 &&

Si usa:

<*>

Esto significa que si $ error! = 0 AND $ error! = 3, que es una lógica no válida porque $ error no puede ser == a 3 y 0, puede ser 3 O 0 pero no ambos.
En el ejemplo anterior si $ error = 0 entonces se evaluaría como FALSO porque no es 3 & amp; & amp; 0 estás buscando que sea 3 || 0.

error != 3) ? FALSE : TRUE;

Esto significa que si $ error! = 0 AND $ error! = 3, que es una lógica no válida porque $ error no puede ser == a 3 y 0, puede ser 3 O 0 pero no ambos.
En el ejemplo anterior si $ error = 0 entonces se evaluaría como FALSO porque no es 3 & amp; & amp; 0 estás buscando que sea 3 || 0.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top