عمليات الحساب المنطقي ECMAScript

عمليات الحساب المنطقي مهمة جدًا، فهي تجعل لغة البرمجة تعمل بشكل صحيح.

هناك ثلاثة أنواع من عمليات الحساب المنطقي: NOT، AND و OR.

عملية ToBoolean

قبل تعلم جميع عمليات الحساب المنطقي، دعونا نتعرف على عملية ToBoolean الموصوفة في معيار ECMAScript-262 v5.

العملية المثيرة للشكوك ToBoolean تتحول معاملاتها إلى قيم منطقية وفقًا للقواعد المذكورة في الجدول التالي:

نوع المعامل النتيجة
Undefined خطأ
Null خطأ
Boolean النتيجة تساوي المعامل المدخل (بدون تحويل)
Number إذا كان المعامل +0، -0 أو NaN، فإن النتيجة ستكون false؛ وإلا ستكون true.
String إذا كان المعامل نصًا فارغًا، فإن النتيجة ستكون false؛ وإلا ستكون true.
Object صحيح

عامل الحساب NOT

في ECMAScript، يتمثل عميل NOT المنطقي في نفسه في C وJava، ويتم تمثيله بال感叹ة (!).

مختلفًا عن عميل OR المنطقي وعميل AND المنطقي،يرجع عميل NOT المنطقي دائمًا إلى قيمة Boolean.

سلوك عميل NOT المنطقي هو كالتالي:

  • إذا كان العنصر هو عنصر، يرجع إلى false
  • إذا كان العنصر هو الرقم 0، يرجع إلى true
  • إذا كان العنصر أي عدد غير صفر، يرجع إلى false
  • إذا كان العنصر هو null، يرجع إلى true
  • إذا كان العنصر هو NaN، يرجع إلى true
  • إذا كان العنصر غير معرف، يحدث خطأ

عادةً، يتم استخدام هذا العملاق للتحكم في الدورات:

var bFound = false;
var i = 0;
while (!bFound) {
  if (aValue[i] == vSearchValues) {
    bFound = true;
  } else {
    i++;
  }
}

في هذا المثال، يستخدم المتغير المنطقي Boolean (bFound) لتسجيل ما إذا كانت البحث ناجحًا أم لا. عند العثور على عنصر البيانات في المشكلة، يتم تعيين bFound إلى true، وسيكون !bFound equals false، مما يعني أن التنفيذ سيخرج من دائرة while.

يمكن أيضًا استخدام عميل NOT المنطقي لتقييم قيمة Boolean لجملة ECMAScript. لفعل ذلك، يجب استخدام عميل NOT المنطقي مرتين في سطر واحد من الكود. يرجع أول عميل NOT المنطقي دائمًا إلى قيمة Boolean. يقوم العملاق الثاني بتوليد النقيض للقيمة المنطقية، مما يمنحك القيمة المنطقية الحقيقية للمتغير.

var bFalse = false;
var sRed = "red";
var iZero = 0;
var iThreeFourFive = 345;
var oObject = new Object;
document.write("مفهوم bFalse هو " + (!!bFalse));
document.write("مفهوم sRed هو " + (!!sRed));
document.write("مفهوم iZero هو " + (!!iZero));
document.write("مفهوم iThreeFourFive هو " + (!!iThreeFourFive));
document.write("oObject المفهوم هو " + (!!oObject));

النتيجة:

قيمة منطقية bFalse هي false
قيمة منطقية sRed هي true
قيمة منطقية iZero هي false
قيمة منطقية iThreeFourFive هي true
قيمة منطقية كائن oObject هي true 

عمليات المنطقية AND

في ECMAScript، يتم تمثيل عمليات المنطقية AND بالرمز (&&):

مثال:

var bTrue = true;
var bFalse = false;
var bResult = bTrue && bFalse;

تعطي الجدول التالي سلوك عمليات المنطقية AND:

رقم الحساب الأول رقم الحساب الثاني النتيجة
صحيح صحيح صحيح
صحيح خطأ خطأ
خطأ صحيح خطأ
خطأ خطأ خطأ

يمكن أن تكون معاملات عمليات المنطقية AND أي نوع، وليس فقط القيم Boolean.

إذا لم يكن أي عنصر هو قيمة Boolean الأصلية، فإن عمليات المنطقية AND لا تعود بالضرورة قيمة Boolean:

  • إذا كان أحد العناصر هو كائن، والأخر هو قيمة Boolean، فإن النتيجة ستكون الكائن.
  • إذا كانت كلا العناصر هما كائنات، فإن النتيجة ستكون الكائن الثاني.
  • إذا كان أي عنصر هو null، فإن النتيجة ستكون null.
  • إذا كان أي عنصر هو NaN، فإن النتيجة ستكون NaN.
  • إذا كان أي رقم حسابي غير معرف، فإنه يحدث خطأ.

تماثل عمليات المنطقية AND في Java، عمليات المنطقية AND في ECMAScript هي عمليات بسيطة، أي إذا قرر أول العناصر النتيجة، فإنه لن يتم حساب العنصر الثاني. بالنسبة لعمليات المنطقية AND، إذا كان أول العناصر هو false، فإن النتيجة لا يمكن أن تكون true مهما كان قيمة العنصر الثاني.

خذ هذا المثال التالي بعين الاعتبار:

var bTrue = true;
var bResult = (bTrue && bUnknown);	//سيحدث خطأ
alert(bResult);			//سطر هذا لن يتم تنفيذه

سيؤدي هذا الكود إلى خطأ أثناء إجراء العمليات المنطقية AND، لأن المتغير bUnknown غير معرف. قيمة المتغير bTrue هي true، لأن العمليات المنطقية AND ستستمر في حساب المتغير bUnknown. هذا سينتج عن خطأ، لأن قيمة bUnknown غير معرفة، ولا يمكن استخدامها في العمليات المنطقية AND.

إذا قمت بتعديل هذا المثال، بوضع الأولي أقل من false، فإنه لن يحدث خطأ:

var bFalse = false;
var bResult = (bFalse && bUnknown);
alert(bResult);			//يظهر النص "false"

في هذا الكود، سينشر الدالة قيمة العمليات المنطقية AND، وهي النص "false". حتى لو كان قيمة المتغير bUnknown غير معرفة، فإنها لن يتم حسابها، لأن قيمة أول العناصر هي false.

إشارة: }}عند استخدام عمليات حساب logical AND، يجب أن تتذكر طبيعة حسابها البسيط.

عمليات حساب logical OR

عمليات حساب logical OR في ECMAScript هي نفسها في Java، ويتم تمثيلها بأعمدة دائرية (||):

var bTrue = true;
var bFalse = false;
var bResult = bTrue || bFalse;

جدول الحقائق التالي يصف سلوك عمليات حساب logical OR:

رقم الحساب الأول رقم الحساب الثاني النتيجة
صحيح صحيح صحيح
صحيح خطأ صحيح
خطأ صحيح صحيح
خطأ خطأ خطأ

مثل عمليات حساب logical AND، إذا لم يكن أي رقم حسابي هو قيمة Boolean، فإن عمليات حساب logical OR لا تعود بالضرورة إلى قيمة Boolean:

  • إذا كان أي رقم حسابي كائنًا، وكان جميع الأرقام الحسابية الأخرى خطأ، فإنه يتم العودة إلى الكائن.
  • إذا كانت كلا الرقمين حسابيين كائنات، فإنه يتم العودة إلى الكائن الأول.
  • إذا كان آخر رقم حسابي هو null، وكان جميع الأرقام الحسابية الأخرى خطأ، فإن الناتج هو null.
  • إذا كان آخر رقم حسابي هو NaN، وكان جميع الأرقام الحسابية الأخرى خطأ، فإن الناتج هو NaN.
  • إذا كان أي رقم حسابي غير معرف، فإنه يحدث خطأ.

مثل عمليات حساب logical AND، هي عمليات حساب سهلة أيضًا. بالنسبة لعمليات حساب logical OR، إذا كان أول رقم حسابي صحيحًا، فإنه لا يتم حساب الثاني.

مثال:

var bTrue = true;
var bResult = (bTrue || bUnknown);
alert(bResult);			// الناتج هو "true"

مثل المثال السابق، هو أن المتغير bUnknown غير معرف. ومع ذلك، بسبب أن قيمة المتغير bTrue هي true، لن يتم حساب bUnknown، وبالتالي فإن الناتج هو "true".

إذا تم تغيير bTrue إلى false، فإنه سيحدث خطأ:

var bFalse = false;
var bResult = (bFalse || bUnknown);	// يحدث خطأ
alert(bResult);			// لن يتم تنفيذ هذا السطر