هناك أربعة أنواع منطقية محددة مسبقًا في دلفي: Boolean، وByteBool، وWordBool، وLongBool. من بينها، النوع المنطقي هو النوع المنطقي المفضل، والثلاثة المتبقية توفر دعم التوافق للغات البرمجة وبيئات Windows الأخرى. يتم استخدام هذه الأنواع المنطقية بنفس الطريقة تقريبًا، ولكن قد يكون لها نتائج غير متوقعة إذا تم استخدامها بالتبادل.
هنا تحليل بسيط للرجوع اليه.
1. المقارنة من منظور استخدام الموارد
قطعة من البيانات من النوع المنطقي تشغل 1 بايت من الذاكرة؛
تشغل قطعة من البيانات من نوع ByteBool بايتًا واحدًا من الذاكرة؛
قطعة من بيانات نوع WordBool تشغل 2 بايت من الذاكرة؛
تشغل بيانات نوع LongBool 4 بايت من الذاكرة.
إذا قام المطور بإنشاء نوع بنية يحتوي على نوع بيانات منطقي عند تصميم البرنامج، فستكون هناك اعتبارات فيما يتعلق باستخدام الموارد. على الرغم من أنه يمكن تعيين أنواع البيانات هذه لبعضها البعض، إلا أن هناك اختلافات في بعض الحالات الخاصة. انظر أولاً إلى العبارة التالية:
يكتب
ByteBoolFile = ملف ByteBool؛
LongBoolFile = ملف LongBool؛
هنا، إذا تم تخزين نفس العدد من القيم المنطقية في هذين النوعين من الملفات، فستختلف أحجام ملفاتهما. عند قراءة البيانات من نفس الملف الفعلي وفقًا لهذين النوعين من الملفات، تكون النتائج أكثر اختلافًا.
فيما يلي برنامج يقارن ByteBool وLongBool. تبلغ أحجام الملفات التي تم الحصول عليها test1.bin وtest2.bin 4 بايت و16 بايت على التوالي.
PROcedure CompareByteBoolWithLongBool;
ثابت
FName1 = 'c: est1.bin';
FName2 = 'c: est2.bin';
يكتب
ByteBoolFile = ملف ByteBool؛
LongBoolFile = ملف LongBool؛
فار
BF: ByteBoolFile;
LF: LongBoolFile;
ب: منطقية؛
يبدأ
ب:= خطأ؛
AssignFile(BF, FName1);
إعادة كتابة(BF);
اكتب (بف، ب، ب، ب، ب)؛
CloseFile(BF);
AssignFile(LF, FName2);
إعادة كتابة(LF);
اكتب (LF، B، B، B، B)؛
CloseFile(LF);
نهاية؛
يمكن للأصدقاء المهتمين مقارنة الاختلافات في قراءة البيانات على هذا الأساس، وستجد اكتشافات أكثر غرابة.
2. المقارنة من منظور عمليات القيمة المنطقية
في دلفي، لا يمكن تعيين القيم المنطقية إلا لواحدة من الثوابت المحددة مسبقًا True وFalse. أنواع البيانات المنطقية الأربعة المذكورة أعلاه لها العلاقة التالية:
منطقية ByteBool، WordBool، LongBool
خطأ < صح خطأ <> صحيح
الترتيب(خطأ) = 0 الترتيب(خطأ) = 0
أورد(صحيح) = 1 أورد(صحيح) <> 0
نجاح (خطأ) = صحيح نجاح (خطأ) = صحيح
Pred(صحيح) = خطأ Pred(False) = صحيح
ليس من الصعب أن نرى أن النوع المنطقي مرتب، في حين أن أنواع البيانات المنطقية الثلاثة الأخرى غير مرتبة. ويوضح البرنامج التالي بعض هذه الاختلافات:
الإجراء CompareBooleanWithLongBool;
فار
ب: منطقية؛
رطل: لونجبول؛
يبدأ
ب:= خطأ؛
رطل := خطأ؛
إذا Ord(B) = Ord(LB) إذن
ShowMessage('Ord(B) = Ord(LB) [B = LB = False]') // سيتم تنفيذه
آخر
ShowMessage('Ord(B) <> Ord(LB) [B = LB = False]');
ب:= صحيح؛
رطل := صحيح؛
إذا Ord(B) = Ord(LB) إذن
ShowMessage('Ord(B) = Ord(LB) [B = LB = صحيح]')
آخر
ShowMessage('Ord(B) <> Ord(LB) [B = LB = True]');
ShowMessage('Ord(B) = ' + IntToStr(Ord(B))); // يجب أن يكون 1
ShowMessage('Ord(LB) = ' + IntToStr(Ord(LB))); // قد يكون -1
نهاية؛