in

Usando valores booleanos en C

apple touch icon@2

Algunas reflexiones sobre los valores booleanos en C:

Soy lo suficientemente mayor como para usar simple ints como mi tipo booleano sin typedefs o definiciones especiales o enumeraciones para valores verdaderos / falsos. Si sigue mi sugerencia a continuación sobre nunca comparar con constantes booleanas, entonces solo necesita usar 0/1 para inicializar las banderas de todos modos. Sin embargo, este enfoque puede considerarse demasiado reaccionario en estos tiempos modernos. En ese caso, definitivamente se debe usar <stdbool.h> ya que al menos tiene la ventaja de estar estandarizado.

Cualquiera que sea el nombre de las constantes booleanas, utilícelas solo para la inicialización. Nunca jamás escribas algo como

if (ready == TRUE) ...
while (empty == FALSE) ...

Estos siempre pueden ser reemplazados por los más claros.

if (ready) ...
while (!empty) ...

Tenga en cuenta que estos pueden leerse en voz alta de manera razonable y comprensible.

Dé a sus variables booleanas nombres positivos, es decir full en lugar de notfull. Esto último conduce a un código que es difícil de leer fácilmente. Comparar

if (full) ...
if (!full) ...

con

if (!notfull) ...
if (notfull) ...

Ambos de la pareja anterior leen con naturalidad, mientras !notfull es incómodo de leer incluso como está, y empeora mucho en expresiones booleanas más complejas.

Por lo general, se deben evitar los argumentos booleanos. Considere una función definida como esta

void foo(bool option) { ... }

Dentro del cuerpo de la función, está muy claro lo que significa el argumento, ya que tiene un nombre conveniente y, con suerte, significativo. Pero, los sitios de llamadas parecen

foo(TRUE);
foo(FALSE):

Aquí, es esencialmente imposible saber qué significa el parámetro sin mirar siempre la definición o declaración de la función, y empeora mucho si agrega aún más parámetros booleanos. Sugiero ya sea

typedef enum { OPT_ON, OPT_OFF } foo_option;
void foo(foo_option option);

o

#define OPT_ON true
#define OPT_OFF false
void foo(bool option) { ... }

En cualquier caso, el sitio de la llamada ahora se ve como

foo(OPT_ON);
foo(OPT_OFF);

que el lector tiene al menos la oportunidad de comprender sin desenterrar la definición de foo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

sdlc agile model

SDLC – Modelo ágil

gfg 200x200 min

Abrir un archivo en Python