المعامل الشرطي في JavaScript

من موسوعة حسوب

المعامل الشرطي (conditional operator) هو المعامل الوحيد في JavaScript الذي يأخذ ثلاثة قيمة ليجري عليها عمليته، ومن الشائع استخدام هذا المعامل كاختصارٍ للتعبير البرمجي if.

البنية العامة

condition ? expr1 : expr2

condition

تعبير برمجي نتيجته هي true أو false.

expr1 و expr2

تعبيرين برمجيين من أيّ نوع.

الوصف

إذا كان الشرط condition محققًا true فسيُعيد المعامل قيمة التعبير expr1، وفيما عدا ذلك سيُعيد قيمة التعبير expr2؛ فمثلًا لو أردنَا عرض رسالة مختلفة اعتمادًا على قيمة المتغير isMember فسنستخدم التعبير البرمجي الآتي:

'The fee is ' + (isMember ? '$2.00' : '$10.00');

يمكنك أيضًا إسناد قيمة إلى المتغيرات اعتمادًا على نتيجة المعامل الثلاثي الشرطي:

var elvisLives = Math.PI > 4 ? 'Yep' : 'Nope';

لاحظ أنَّ بالإمكان استخدام أكثر من معامل شرطي معًا:

var firstCheck = false,
    secondCheck = false,
    access = firstCheck ? 'Access denied' : secondCheck ? 'Access denied' : 'Access granted';
  
console.log(access); // "Access granted"

يمكن أيضًا استخدام أكثر من معامل شرطي كما نستخدم أكثر من تعبير if متشعب:

var condition1 = true,
    condition2 = false,
    access = condition1 ? (condition2 ? "true true": "true false") : (condition2 ? "false true" : "false false");

console.log(access); // "true false"

لاحظ أنَّ الأقواس غير ضرورية، ولن تؤثر على وظيفة المعامل، لكنها تساعدنا في تسهيل فهم المعامل. يمكنك أيضًا استخدام المعامل الثلاثي دون إسناد قيمته إلى متغير لإجراء عمليات اعتمادًا على قيمة أحد التعابير:

var stop = false, age = 16;

age > 18 ? location.assign('continue.html') : stop = true;

يمكنك أيضًا إجراء أكثر من عملية واحدة في كل حالة، بفصلها بفاصلة , وبوضعها ضمن قوسين:

var stop = false, age = 23;

age > 18 ? (
    alert('OK, you can go.'),
    location.assign('continue.html')
) : (
    stop = true,
    alert('Sorry, you are much too young!')
);

يمكنك أيضًا إجراء أكثر من عملية عند إسناد ناتج هذا المعامل إلى متغير، وستُستخدَم آخر قيمة يسبقها معامل الفاصلة ضمن القوسين:

var age = 16;

var url = age > 18 ? (
    alert('OK, you can go.'), 
    'continue.html' // القيمة التي ستُسنَد إذا كان العمر أكبر من 18
) : (
    alert('You are much too young!'),
    alert('Sorry :-('),
    'stop.html' // القيمة التي ستُسنَد إذا كان العمر ليس أكبر من 18
);

location.assign(url); // "stop.html"

إعادة قيمة المعامل الشرطي

من المناسب استخدام المعامل الشرطي الثلاثي عند إعادة قيمة من دالةٍ ما التي كانت ستتطلب استخدام التعبير البرمجي if...else:

var func1 = function( .. ) {
  if (condition1) { return value1 }
  else { return value2 }
}

var func2 = function( .. ) {
  return condition1 ? value1 : value2
}

دعم المتصفحات

الميزة Chrome Firefox Internet Explorer Opera Safari
الدعم الأساسي نعم نعم نعم نعم نعم

مصادر ومواصفات