نوع البيانات المنطقي أو البولياني Boolean -واختصارًا bool نسبة إلى العالم George Boole- يمثَّل بتمثيل ثنائي فقط عادة صح true أو خطأ false أو 1 أو 0 أو يوجد ولا يوجد وهكذا، ويُستخدم هذا النوع في البرمجة بصورة كبيرة في عمليات المقارنة والتحكم بسير عمل البرنامج.
يُمثَّل نوع البيانات هذا في لغة جو بالقيمة false
والقيمة true
مع ملاحظة أنه لابد من أن يكون أول محرف صغيرًا وليس كبيرًا، كما تغطي هذه المقالة الأساسيات التي ستحتاج إليها لفهم كيفية عمل نوع البيانات المنطقية بما في ذلك المقارنة المنطقية والعوامل المنطقية وجداول الحقيقة.
عوامل المقارنة
تُستخدَم عوامل المقارنة لمقارنة القيم وتقييّمها للحصول على قيمة منطقية واحدة إما صحيحة أو خاطئة، ويوضح الجدول أدناه عوامل المقارنة المنطقية:
العامل | توضيح |
---|---|
== | المساواة |
=! | عدم المساواة |
> | أصغر |
< | أكبر |
<= | أكبر أو يساوي |
=< | أصغر أو يساوي |
سنستخدِم العددين الصحيحين التاليين لتوضيح آلية عمل هذه المتغيرات:
x := 5 y := 8
من الواضح أنّ قيمة x
أصغر من y
، وسنستخدِم كل العوامل التي ذكرناها في الجدول السابق وسنرى خرج البرنامج مع كل حالة في الشيفرة التالية:
package main import "fmt" func main() { x := 5 y := 8 fmt.Println("x == y:", x == y) fmt.Println("x != y:", x != y) fmt.Println("x < y:", x < y) fmt.Println("x > y:", x > y) fmt.Println("x <= y:", x <= y) fmt.Println("x >= y:", x >= y) }
سيكون الخرج كما يلي:
x == y: false x != y: true x < y: true x > y: false x <= y: true x >= y: false
سألنا جو في الشيفرة أعلاه ما يلي:
-
هل
x
تساويy
؟ والإجابة كانتfalse
طبعًا. -
هل
x
لا تساويy
؟ والإجابةtrue
. -
هل
x
أصغر منy
؟ والإجابةtrue
. -
هل
x
أكبر منy
؟ والإجابةfalse
. -
هل
x
أصغر أو يساويy
؟ والإجابةtrue
. -
هل
x
أكبر أو يساويy
؟ والإجابةfalse
.
استخدَمنا الأعداد الصحيحة هنا، لكن يمكنك استخدام الأعداد العشرية أيضًا، كما يمكن أيضًا استخدام السلاسل النصية مع العوامل المنطقية، وتجدر الإشارة إلى أن مقارنة السلاسل حساسة لحالة المحارف، فالمحرف s لا يساوي المحرف S كما في المثال التالي:
Sammy := "Sammy" sammy := "sammy" alsoSammy := "Sammy" fmt.Println("Sammy == sammy: ", Sammy == sammy) fmt.Println("Sammy == alsoSammy", Sammy == alsoSammy)
يكون الخرج كما يلي:
Sammy == sammy: false Sammy == alsoSammy true
لاحظ أنه عندما قارنا كلمة Sammy بكلمة sammy كان الخرج false
؛ أما عندما قارنّا كلمة Sammy مع Sammy كان الخرج true
، وبالتالي كما ذكرنا تكون مقارنة السلاسل النصية حساسةً لحالة المحارف.
يمكنك أيضًا استخدام عوامل المقارنة الأخرى، مثل >
و <
لمقارنة السلاسل، وفي هذه الحالة ستقارن جو هذه السلاسل اعتمادًا على الترتيب المُعجمي lexicographically اعتمادًا على قيم ASCII للمحارف، كما يمكنك أيضًا تقييم القيم المنطقية باستخدام عوامل المقارنة، إذ سنختبر في المثال التالي فيما إذا كان المتغير المنطقي t
الذي يحمل القيمة true
لايساوي المتغير المنطقي f
الذي يحمل القيمة false
.
t := true f := false fmt.Println("t != f: ", t != f)
يكون الخرج كما يلي:
t != f: true
انتبه إلى أن العامِل =
يختلف عن العامِل ==
، إذ يُستخدَم الأول لعمليات الإسناد والثاني للاختبار المساواة، ويوضح المثال التالي الفرق، ففي الحالة الأولى نُسند قيمة y
إلى x
وفي السطر التالي نختبر مساواة x
مع y
.
x = y // إسناد قيمة المتغير اليميني إلى المتغير اليساري x == y // تقييم نتيجة المساواة بين المتغيرين
العوامل المنطقية
يوجد نوعان من العوامل المنطقية في الجبر المنطقي والمستخدَمان لتحديد العلاقة بين المتغيرات هما and و or، إضافةً إلى عامل النفي not، إذ يرمَز في لغة جو للعامل المنطقي and بالرمز &&
وللعامل or بالرمز ||
وللعامل not بالرمز !
كما يلي:
-
x && y
تعني أنه إذا كان كل منx
وy
مٌحققان أي كلاهماtrue
، فسيكون الناتجtrue
وإلا فسيكونfalse
. -
x || y
تعني أنه إذا كان أحدهماtrue
، فسيكون الناتجtrue
. -
x!
تعني أنه إذا كانتx
قيمتهاtrue
، فسيكون الخرجfalse
، وإذا كانتfalse
فسيكون الخرجtrue
.
كثيرًا ماتُستخدَم هذه العوامل في البرمجة ولا سيما عند محاولة اختبار تعابير متعددة أو شروط متعددة، فإذا كنت مثلًا تبني برنامجًا يُحدِّد فيما إذا كان الطالب ناجحًا أم لا في إحدى المواد الجامعية، فيجب أن يكون الطالب قد حضر 4 جلسات عمليّة على الأقل x
، ويجب أن يحصل على 40% من درجة الامتحان العملي على الأقل y
و60% من درجة الامتحان (النظري + العملي) على الأقل z
، أي لدينا 3 متغيرات x y z
ويجب أن تتحقق كلها، أي x && y && z
، ولنرى مثالًا عن استخدام هذه العوامل كما يلي:
fmt.Println((9 > 7) && (2 < 4)) // التعبيران محققان fmt.Println((8 == 8) || (6 != 6)) // التعبير الأول صحيح فقط fmt.Println(!(3 <= 1)) // التعبير خاطئ، لكن مع النفي يصبح صحيح
يكون الخرج كما يلي:
true true true
لدينا في السطر الأول ((fmt.Println((9 > 7) && (2 < 4
، نلاحظ أنّ 9 أكبر من 7 و 2 أصغر من 4، وبالتالي فإن طرفَي العلاقة محققان، وبالتالي سيطبع true، وفي السطر الثاني ((fmt.Println((8 == ? || (6 != 6
نلاحظ أنّ 8 تساوي 8 مُحققة، لكن 6 لا تساوي 6 غير مُحققة ولكن مع ذلك سيطبع true
، لأنه في حالة العامل المنطقي ||
يكفي أن يكون أحد طرفَي العلاقة محققًا؛ أما في السطر الأخير ((fmt.Println(!(3 <= 1
، فنلاحظ أنّ 1=<3
تقييمها false
، لكن بما أننا نستخدِم معامل النفي، فسيكون الخرج هو الحالة المعاكسة، أي true
.
لا يختلف المثال التالي عما سبق إلا في نوع البيانات، إذ سنستخدِم نوع البيانات العشرية بدل الصحيحة:
fmt.Println((-0.2 > 1.4) && (0.8 < 3.1)) // تعبير واحد فقط صحيح fmt.Println((7.5 == 8.9) || (9.2 != 9.2)) // التعبيران خاطئان fmt.Println(!(-5.7 <= 0.3)) // التعبير صحيح ولكن يصبح مع النفي خاطئًا
يمكنك أيضًا كتابة تعليمات مركبة باستخدام &&
و ||
و !
:
!((-0.2 > 1.4) && ((0.8 < 3.1) || (0.1 == 0.1)))
يكون الخرج كما يلي:
true
نلاحظ أن نتيجة التركيب (0.8 < 3.1) || (0.1 == 0.1)
هي true
فكلا الطرفَين محققَين، لكن نلاحظ أنّ الطرف (-0.2 > 1.4)
غير محقق، أي تقييمه false
، وبالتالي سيكون خرج التركيب السابق بأكمله هو false
، وبما أنه لدينا إشارة النفي، فسيكون الخرج هو true
.
أي باختصار، العوامل المنطقية &&
و ||
و !
تقيم تعبيرات ثم تعيد قيمة منطقية ناتجة عن تقييمها.
جداول الحقيقة
لتعزيز قدراتك البرمجية لا بدّ أن يكون لديك القليل من الفهم عن الفرع المنطقي للرياضيات، وفيما يلي جداول الحقيقة لعامل المقارنة ==
، ولكل من العوامل المنطقية &&
، ||
و !
. ويفضل أن تحفظها، لتصبح راسخة في ذهنك إذ ستسرع من عملية اتخاذ القرار البرمجي لديك:
-
جدول الحقيقة لعامِل المقارنة
==
:
x | == | y | الخرج |
---|---|---|---|
true | == | true | true |
true | == | false | false |
false | == | true | false |
false | == | false | true |
-
جدول الحقيقة للعامِل المنطقي and أو
&&
:
x | and | y | الخرج |
---|---|---|---|
true | and | true | true |
true | and | false | false |
false | and | true | false |
false | and | false | false |
-
جدول الحقيقة للعامِل المنطقي or أو
||
:
x | or | y | الخرج |
---|---|---|---|
true | or | true | true |
true | or | false | true |
false | or | true | true |
false | or | false | false |
-
جدول الحقيقة للعامِل المنطقي not أو
!
:
not | x | الخرج |
---|---|---|
not | false | true |
not | true | false |
استخدام العوامل المنطقية للتحكم بسير عمل البرنامج
يمكنك استخدام العوامل المنطقية أو عوامل المقارنة للتحكم بسير عمل البرنامج من خلال استخدامها مع جمل الشرط if .. else
، فعند تحقق شرط ما يتخذ البرنامج إجراءً محددًا استجابةً لذلك عند تلك النقطة، أي إذا تحقق هذا افعل هذا وإلا لا تفعل وتابع فيما كنت تفعله، ويوضح المثال التالي هذا الأمر:
if grade >= 65 { // شرط Condition fmt.Println("Passing grade") // بند Clause } else { fmt.Println("Failing grade") }
المقصود من الشيفرة أنه إذا كانت درجة الطالب أكبر أوتساوي 65، فاطبع أنه ناجح، وإلا اطبع أنه راسب، أي إذا كانت درجة الطالب 83 مثلًا، فسيطبع Passing grade وإذا كانت 59 سيطبع Failing grade.
الخاتمة
استعرضنا في هذا المقال العوامِل المنطقية وعوامل المقارنة التي تُستخدم في الجبر المنطقي وفي العديد من التطبيقات في عالم البرمجة، كما تعرّفنا أيضًا على جداول الحقيقة وأظهرنا كيفية استخدام العوامل المنطقية وعوامل المقارنة في التحكم في سير عمل البرنامج.
ترجمة -وبتصرُّف- للمقال Understanding Boolean Logic inGo لصاحبه Gopher Guides.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.