Ada empat tipe Boolean yang telah ditentukan sebelumnya di Delphi: Boolean, ByteBool, WordBool, dan LongBool. Diantaranya, tipe Boolean adalah tipe Boolean yang disukai, dan tiga sisanya memberikan dukungan kompatibilitas untuk bahasa pemrograman lain dan lingkungan Windows. Tipe Boolean ini digunakan dengan cara yang hampir sama, namun mungkin memiliki hasil yang tidak diharapkan jika digunakan secara bergantian.
Berikut ini analisis sederhana untuk referensi Anda.
1. Perbandingan dari perspektif penggunaan sumber daya
Sepotong data bertipe Boolean menempati 1 byte memori;
Sepotong data tipe ByteBool menempati 1 byte memori;
Sepotong data tipe WordBool menempati 2 byte memori;
Data tipe LongBool menempati 4 byte memori.
Jika pengembang membangun tipe struktur yang berisi tipe data Boolean saat merancang suatu program, maka akan ada pertimbangan dalam hal penggunaan sumber daya. Meskipun tipe data ini dapat ditugaskan satu sama lain, terdapat perbedaan dalam beberapa kasus khusus. Perhatikan dulu pernyataan berikut ini:
jenis
ByteBoolFile = file ByteBool;
LongBoolFile = file LongBool;
Di sini, jika jumlah nilai Boolean yang sama disimpan dalam kedua jenis file ini, ukuran filenya akan berbeda. Saat membaca data dari file fisik yang sama menurut kedua jenis file tersebut, hasilnya jauh lebih berbeda.
Berikut ini adalah program yang membandingkan ByteBool dan LongBool. Ukuran file dari file test1.bin dan test2.bin yang diperoleh masing-masing adalah 4 byte dan 16 byte.
Prosedur BandingkanByteBoolDenganLongBool;
konstanta
FName1 = 'c:est1.bin';
FName2 = 'c:est2.bin';
jenis
ByteBoolFile = file ByteBool;
LongBoolFile = file LongBool;
var
BF: ByteBoolFile;
JIKA: LongBoolFile;
B: Boolean;
mulai
B := Salah;
AssignFile(BF, FName1);
Menulis Ulang(BF);
Menulis(BF, B, B, B, B);
TutupFile(BF);
AssignFile(LF, FName2);
Menulis Ulang(LF);
Tulis(LF, B, B, B, B);
TutupFile(LF);
akhir;
Teman yang tertarik dapat membandingkan perbedaan dalam membaca data berdasarkan ini, dan Anda akan menemukan lebih banyak penemuan aneh.
2. Perbandingan dari perspektif operasi nilai Boolean
Di Delphi, nilai Boolean hanya dapat ditetapkan ke salah satu konstanta yang telah ditentukan sebelumnya, Benar dan Salah. Keempat tipe data Boolean di atas memiliki hubungan sebagai berikut:
Boolean ByteBool, WordBool, LongBool
Salah < Benar Salah <> Benar
Ord(Salah) = 0 Ord(Salah) = 0
Ord(Benar) = 1 Ord(Benar) <> 0
Succ(Salah) = Benar Succ(Salah) = Benar
Pred(Benar) = Salah Pred(Salah) = Benar
Tidak sulit untuk melihat bahwa tipe data Boolean terurut, sedangkan tiga tipe data Boolean lainnya tidak terurut. Program berikut mengilustrasikan beberapa perbedaan ini:
prosedur BandingkanBooleanDenganLongBool;
var
B: Boolean;
LB: Bool Panjang;
mulai
B := Salah;
LB := Salah;
jika Ord(B) = Ord(LB) maka
ShowMessage('Ord(B) = Ord(LB) [B = LB = False]') //akan dieksekusi
kalau tidak
ShowMessage('Ord(B) <> Ord(LB) [B = LB = Salah]');
B := Benar;
LB := Benar;
jika Ord(B) = Ord(LB) maka
ShowMessage('Ord(B) = Ord(LB) [B = LB = Benar]')
kalau tidak
ShowMessage('Ord(B) <> Ord(LB) [B = LB = True]'); //akan dieksekusi
ShowMessage('Ord(B) = ' + IntToStr(Ord(B))); //Harus 1
ShowMessage('Ord(LB) = ' + IntToStr(Ord(LB))); //mungkin -1
akhir;