c - respuesta - 1=falso y 0=verdadero?
meta refresh html5 (6)
Encontré una función is_equals () en la API de ac en el trabajo que devolvió 1 para tablas de sql no iguales (false) y 0 para iguales (true). Solo me di cuenta después de ejecutar casos de prueba en mi código, uno para el ejemplo positivo y otro para el negativo, y ambos fallaron, lo que al principio no tenía mucho sentido. El código en la API no tiene un error porque la salida se registró correctamente en su documentación.
Mis preguntas: ¿existen mundos al revés / universos paralelos / lenguajes de codificación en los que esta NOTACIÓN lógica sea normal? ¿No es 1 generalmente cierto? ¿Está el codificador de la API cometiendo un error?
Este mundo al revés es común con devoluciones de error de proceso. La variable shell $?
informa el valor de retorno del programa anterior para ejecutar desde el shell, por lo que es fácil saber si un programa tiene éxito o falla:
$ false ; echo $?
1
$ true ; echo $?
0
Se eligió esto porque hay un solo caso en el que un programa tiene éxito, pero podría haber docenas de razones por las que un programa falla. Al permitir que haya muchos códigos de error de falla diferentes, un programa puede determinar por qué otro programa falló sin tener que analizar la salida. .
Un ejemplo concreto es el programa aa-status
suministrado con la herramienta de control de acceso obligatorio de AppArmor :
Upon exiting, aa-status will set its return value to the
following values:
0 if apparmor is enabled and policy is loaded.
1 if apparmor is not enabled/loaded.
2 if apparmor is enabled but no policy is loaded.
3 if the apparmor control files aren''t available under
/sys/kernel/security/.
4 if the user running the script doesn''t have enough
privileges to read the apparmor control files.
(Estoy seguro de que hay programas más extendidos con este comportamiento, pero conozco bien este).
No estoy seguro de si estoy respondiendo la pregunta correctamente, pero aquí hay un ejemplo familiar:
El tipo de retorno de GetLastError()
en Windows es distinto de cero si hubo un error o, de lo contrario, cero. El reverso suele ser cierto para el valor de retorno de la función que llamó.
No hay una buena razón para que 1
sea verdadero y 0
sea falso; Así es como las cosas siempre han sido anotadas. Entonces, desde una perspectiva lógica, la función en su API no es "incorrecta", per se.
Dicho esto, normalmente no es aconsejable trabajar contra los modismos de cualquier lenguaje o marco que se esté usando sin una buena razón para hacerlo, por lo que quienquiera que haya escrito esta función probablemente sea bastante tonto, asumiendo que no es simplemente un error.
Puede muy bien ser un error en el autor original, sin embargo, la noción de que 1 es verdadero y 0 es falso no es un concepto universal. En shell scripting 0 se devuelve para el éxito, y cualquier otro número para el fracaso. En otros idiomas, como Ruby, solo nil y false se consideran falsos, y cualquier otro valor se considera verdadero, por lo que en Ruby tanto 1 como 0 se considerarán verdaderos.
Sospecho que solo está siguiendo el estándar Linux / Unix para devolver 0 en caso de éxito .
¿ Realmente dice que "1" es falso y "0" es verdadero?
Es común que las funciones de comparación devuelvan 0
en "iguales", de modo que también puedan devolver un número negativo para "menor que" y un número positivo para "mayor que". strcmp()
y memcmp()
funcionan así.
Sin embargo, es idiomático que cero sea falso y no cero que sea verdadero, porque así es como funcionan el control de flujo de C y los operadores lógicos booleanos. Por lo tanto, podría ser que los valores de retorno elegidos para esta función estén bien, pero es el nombre de la función el que está en error (en realidad debería llamarse compare()
o similar).