Hay cuatro tipos booleanos predefinidos en Delphi: booleano, ByteBool, WordBool y LongBool. Entre ellos, el tipo booleano es el tipo booleano preferido y los tres restantes brindan soporte de compatibilidad para otros lenguajes de programación y entornos Windows. Estos tipos booleanos se utilizan prácticamente de la misma manera, pero pueden tener resultados inesperados si se usan indistintamente.
Aquí hay un análisis simple para su referencia.
1. Comparación desde la perspectiva del uso de recursos.
Un dato de tipo booleano ocupa 1 byte de memoria;
Un dato de tipo ByteBool ocupa 1 byte de memoria;
Un dato de tipo WordBool ocupa 2 bytes de memoria;
Un dato de tipo LongBool ocupa 4 bytes de memoria.
Si el desarrollador construye un tipo de estructura que contiene un tipo de datos booleano al diseñar un programa, habrá consideraciones en términos de uso de recursos. Aunque estos tipos de datos se pueden asignar entre sí, en algunos casos especiales existen diferencias. Primero mire la siguiente declaración:
tipo
ByteBoolFile = archivo de ByteBool;
LongBoolFile = archivo de LongBool;
Aquí, si se almacena la misma cantidad de valores booleanos en estos dos tipos de archivos, sus tamaños de archivo son diferentes. Al leer datos de un mismo archivo físico según estos dos tipos de archivos, los resultados son aún más diferentes.
El siguiente es un programa que compara ByteBool y LongBool. Los tamaños de archivo de los archivos obtenidos test1.bin y test2.bin son 4 bytes y 16 bytes respectivamente.
Procedimiento CompareByteBoolWithLongBool;
constante
FName1 = 'c: est1.bin';
FName2 = 'c: est2.bin';
tipo
ByteBoolFile = archivo de ByteBool;
LongBoolFile = archivo de LongBool;
var
BF: ByteBoolFile;
LF: ArchivoBoolLong;
B: booleano;
comenzar
B := Falso;
AsignarArchivo(BF, FName1);
Reescribir (BF);
Escribir(BF, B, B, B, B);
CerrarArchivo(BF);
AsignarArchivo(LF, FName2);
Reescribir (LF);
Escribir(LF, B, B, B, B);
CerrarArchivo(LF);
fin;
Los amigos interesados pueden comparar las diferencias en la lectura de datos sobre esta base y encontrarán descubrimientos más peculiares.
2. Comparación desde la perspectiva de las operaciones de valor booleano
En Delphi, a los valores booleanos solo se les puede asignar una de las constantes predefinidas Verdadero y Falso. Los cuatro tipos de datos booleanos anteriores tienen la siguiente relación:
ByteBool booleano, WordBool, LongBool
Falso < Verdadero Falso <> Verdadero
Orden(Falso) = 0 Orden(Falso) = 0
Orden(Verdadero) = 1 Orden(Verdadero) <> 0
Succ(Falso) = Verdadero Succ(Falso) = Verdadero
Pred(Verdadero) = Falso Pred(Falso) = Verdadero
No es difícil ver que el tipo booleano está ordenado, mientras que los otros tres tipos de datos booleanos están desordenados. El siguiente programa ilustra algunas de estas diferencias:
procedimiento CompareBooleanWithLongBool;
var
B: booleano;
LB: bool largo;
comenzar
B := Falso;
LB := Falso;
si Ord(B) = Ord(LB) entonces
ShowMessage('Ord(B) = Ord(LB) [B = LB = False]') //se ejecutará
demás
ShowMessage('Orden(B) <> Ord(LB) [B = LB = Falso]');
B := Verdadero;
LB := Verdadero;
si Ord(B) = Ord(LB) entonces
ShowMessage('Orden(B) = Orden(LB) [B = LB = Verdadero]')
demás
ShowMessage('Ord(B) <> Ord(LB) [B = LB = True]'); //se ejecutará
ShowMessage('Ord(B) = ' + IntToStr(Ord(B))); //Debe ser 1
ShowMessage('Ord(LB) = ' + IntToStr(Ord(LB)) //puede ser -1
fin;