التحويل المنطقي (Boolean Casting)
مقدمة
التحويل المنطقي هو عملية تحويل القيم بكل أنواعها إلى القيم المنطقية (true
or false
)؛ فمثلاً ربما قد سمعت سابقاً أن الحاسوب يعتبر أن 0 يعني false وأن 1 يعني true فهذا بالضبط ما سنتعلمه في التحويل المنطقي، وهذه العملية هامة جداً خصوصا في الشروط.
التحويل المنطقي والشروط
تأمل المثال التالي:
var num = 1;
if (num){
console.log('test');
}
في المثال السابق، كيف قام المفسر بطباعة "test" على الرغم من أن الشرط لا يساوي true
أو false
! الشرط هنا يساوي 1
، فكيف حدثت؟
كيف يتحقق المفسر من الشرط؟
لمعرفة سبب ناتج المثال السابق يجب أن نعرف جيداً ما يحدث وراء الكواليس، كيف يعمل المفسر؟ كيف يتحقق من الشرط؟
- معالجة التعبير: يقوم المفسر بمعالجة التعبير (إن وُجد) والحصول على الناتج
- التحويل المنطقي: يقوم المفسر بتحويل الناتج إلى قيمة منطقية
- التحقق المنطقي: التحقق هل الناتج يساوي
true
أمfalse
معالجة التعبير
لنفرض أن الشرط الذي أدخلته للمفسر هو تعبير مقارنة، مثلاً: 5 == 4
، يقوم المفسر أولاً بمعالجة تعبير المقارنة والحصول على ناتجه، في هذه الحالة سيكون الناتج false
، ويتم نفس الشيء مع أي تعبير أخر، مثلاً استدعاء دالة، استخدام متغير، تعبير حسابي، تعبير منطقي .. الخ، ومن الممكن ألّا يحتوي الشرط على تعبير، مثلاً يكون الشرط if (5)
ففي هذه الحالة سيتخطى مرحلة معالجة التعبير.
التحويل المنطقي (Boolean Casting)
يقوم المفسر بتحويل الناتج إلى قيمة منطقية عن طريق التحويل المنطقي، فيقوم المفسر بالتحقق هل القيمة الحالية إذا حولناها إلى قيمة منطقية تكون true
أم false
?
التحقق المنطقي
يتحقق المفسر أخيراً هل الناتج true
إذن تحقق الشرط ويقوم المفسر بتنفيذ كتلة اﻷوامر، غير ذلك يتخطى الشرط... كما ذكرنا سابقاً في درس الشروط
إذن يجب عليك تعلم التحويل المنطقي، وقواعده، حتى تتمكن من التعامل مع الشروط بشكل صحيح!
false
قيم تتحول إلى هذه القيم يتعامل المفسر معها منطقياً على أنها false
، وتسمى هذه القيم (Falsy):
false
: القيمة المنطقيةfalse
بالتأكيد منطقياً تساوي false0
: العدد صفر ولكن بشرط أن يكون من نوع عدد (integer) أو عدد عشري، وليس نصّnull
: القيمة الفارغة يعتبرها المفسر منطقياً false""
: النصّ الفارغ (empty string) يعتبره المفسر منطقياً false
بإختصار كل ما هو "فارغ" تقريباً يُعتبر false
في معظم لغات البرمجة تُعتبر المصفوفة الفارغة []
هي قيمة Falsy أيضاً، يعتبرها المفسر false وكذلك مع القواميس {}
فمثلاً في بايثون {}
يعتبر منطقياً false ولكن جافاسكريبت تختلف في هذه النقطة، فتتعامل مع المصفوفة الفارغة []
والقاموس الفارغ {}
على أنه true لذلك انتبه جيداً لهذه الملحوظة، وسنزودك بحل لهذه المشكلة لاحقاً في الدرس.
أمثلة مع الشروط
var data = null;
var num = 0;
var text = "";
if (data){
console.log('data is true');
}
if (num){
console.log('num is true');
}
if (text){
console.log('text is true');
}
المثال السابق لن يطبع أي شيء ﻷن القيم كلها منطقياً تعتبر false
true
قيم تتحول إلى هي القيم التي يتعامل المفسر معها منطقياً على أنها true
، وتسمى (Truthy Values)
true
: القيمة المنطقية true بالتأكيد تُعتبر منطقياً true- كل النصوص ما عدا النص الفارغ
- كل اﻷعداد ما عدا صفر
- المصفوفات والقواميس الغير فارغة
بإختصار: هي كل القيم التي لا يعتبرها المفسر false!
بإختصار: هي كل القيم الغير فارغة، التي تعبر عن قيمة
كل النصوص ما عدا النص الفارغ
- النصوص كـ:
"دليل مبرمج"
"0"
: يعتبره المفسر true ﻷنه نصّ (string) وليس عدد"false"
: يعتبرها المفسر true ﻷن نوعها نصّ (string) وليست boolean لأنها داخل""
var text = "test";
if (text){
console.log("it's true");
}
كل اﻷعداد ما عدا صفر
يتعامل المفسر مع كل اﻷعداد على أنها منطقياً true
ما عدا الصفر يعتبر false
if (0){
console.log("0 is true");
}else{
console.log("0 is false");
}
if (1){
console.log("1 is true");
}else{
console.log("1 is false");
}
Boolean()
استخدام الدالة يمكن استخدام الدالة Boolean()
لتحويل أي قيمة إلى قيمة منطقية.
ذكرناها لاستخدامها في اﻹختبار والتعلّم فقط
console.log( Boolean("1") ); // true
console.log( Boolean(1) ); // true
console.log( Boolean("0") ); // true
console.log( Boolean(0) ); // false
console.log( Boolean(22) ) // true
console.log( Boolean("") ); // false
console.log( Boolean("test") ); // true
console.log( Boolean("true") ); // true
console.log( Boolean(true) ); // true
console.log( Boolean("false") ); // true
console.log( Boolean(false) ); // false
console.log( Boolean([1,2,3]) ) // true
true
true
false
true
false
true
true
true
true
false
true
المساهمين
وجدت خطأ أو تريد المساهمة في محتوى الدرس؟ عدل الصفحة على Github