اذهب إلى المحتوى

نوع البيانات المنطقي أو البولياني 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.

اقرأ أيضًا


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...