أحيانا تحتاج تختار قيمة من اختيارين حسب شرط زي نص زر أو تكلفة شحن هنا ال Conditional Operator المعروف باسم Ternary بيكون مناسب لأنه تعبير ليه نتيجة تقدر تخزنها أو ترجعها من دالة
ليه اسمه Ternary
لأنه بيتعامل مع ثلاثة أجزاء الشرط وبعده تعبير حالة النجاح وبعده تعبير الحالة التانية ال if جملة للتحكم في مسار التنفيذ ومش دالة وال Ternary مش مطلوب يحل محل كل if
condition ? valueIfTrue : valueIfFalseنفس القرار بطريقتين
هنحدد رسالة حسب وجود رصيد في الحساب الأول باستخدام if وبعدها نكتب اختيار القيمة باستخدام العامل الشرطي
const balance = 50;
let message;
if (balance > 0) {
message = "Balance available";
} else {
message = "Empty balance";
}
console.log(message);const balance = 50;
const message = balance > 0 ? "Balance available" : "Empty balance";
console.log(message);Balance availableهنا الهدف اختيار نص واحد فالطريقة المختصرة واضحة لكن لو كل فرع فيه خطوات كتير فال if غالبا هتكون أسهل في القراءة والتعديل
استخدام النتيجة داخل دالة
تقدر ترجع القيمة المختارة مباشرة من الدالة هنا الطلب اللي مجموعه 300 أو أكتر شحنه مجاني وغير كده الشحن 25
function shippingCost(total) {
return total >= 300 ? 0 : 25;
}
console.log(shippingCost(350));
console.log(shippingCost(120));0
25بيتنفذ فرع واحد فقط
بعد تقييم الشرط بيتقيم التعبير المختار بس المثال بيخلي كل فرع يطبع رسالة علشان تشوف بنفسك إن الفرع التاني متنفذش
function selected(value) {
console.log("Selected: " + value);
return value;
}
const label = true ? selected("Ready") : selected("Waiting");
console.log(label);Selected: Ready
Readyالشرط مش لازم يكون Boolean مكتوب بشكل مباشر
القيمة بتتفسر حسب قواعد Truthy و Falsy الصفر والنص الفاضي و null و undefined و NaN و false قيم بتتصرف كحالة غير متحققة في الشرط بينما النص "0" و Array فاضية بيعتبروا Truthy
console.log(0 ? "Yes" : "No");
console.log("0" ? "Yes" : "No");
console.log([] ? "Yes" : "No");No
Yes
Yesلما الصفر يكون قيمة صحيحة
لو المستخدم اختار كمية صفر فممكن تكون قيمة مقصودة استخدام الشرط المباشر هيبدلها بالقيمة الافتراضية لو المطلوب الاستبدال عند null أو undefined بس استخدم ??
const quantity = 0;
console.log(quantity ? quantity : 1);
console.log(quantity ?? 1);1
0تعدد الحالات من غير تعقيد القراءة
ممكن تربط أكتر من شرط لكن متخليش الاختصار يصعب فهم المطلوب المثال بسيط وفيه ثلاث درجات لو القواعد زادت أو الفروع احتاجت خطوات استخدم if أو دالة واضحة
const score = 75;
const level = score >= 90
? "Excellent"
: score >= 60
? "Passed"
: "Try again";
console.log(level);Passedتدريب عملي
اعمل دالة ترجع In stock لو الكمية أكبر من صفر وترجع Out of stock في غير كده وجربها بقيمة موجبة وصفر بعد الحل اسأل نفسك هل اسم الدالة والشرط بيوضحوا المطلوب من غير شرح إضافي