ملاحظة مهمة: هذه إضافة حديثة للغة، لذلك تحتاج بعض المتصفحات القديمة لترقيع هذا النقص لأن ما سنشرحه هو إضافة حديثة للغة.
يوفر عامل الاستبدال اللاغي ??
(Nullish coalescing operator) صيغة قصيرة لاختيار أول متغير معرّف (defined) من القائمة.
نتيجة a ?? b
هو:
-
سيُعيد
a
إذا لم تكن فارغةnull
أو غير معرّفةundefined
، -
وإلا سيُعيد
b
.
إذًا x = a ?? b
هي اختصار:
x = (a !== null && a !== undefined) ? a : b;
إليك مثال أطول لتوضيح الأمر.
تخيل أن لدينا مستخدم، وهناك متغيرات FirstName
وlastName
أو nickName
لاسمهم الأول واسم العائلة أو اللقب. وويمكن أن تكون جميعها غير معرفة (undefined)، إذا قرر المستخدم عدم إدخال أي قيمة.
نرغب في عرض اسم المستخدم: في حال أدخل أحد هذه المتغيرات الثلاثة، أو إظهار الإسم "مجهول" إذا لم يعيّن أي شيئ.
دعنا نستخدم العامل ؟؟
لتحديد أول متغيّر معرّف:
let firstName = null; let lastName = null; let nickName = "Supercoder"; // سيعرض أول قيمة غير فارغة أو غير معرفة alert(firstName ?? lastName ?? nickName ?? "Anonymous"); // Supercoder
استخدام العامل ||
يمكن استخدام العامل ||
بنفس طريقة استخدام ??
. في الواقع، أي يمكننا استعمال ||
مكان ؟؟
في الشيفرة أعلاه والحصول على نفس النتيجة، كما شرحناها في مقال العاملات المنطقية في لغة جافاسكربت.
الفرق المهم هو:
-
إن
||
تُعيد القيمة الحقيقية الأولى. -
بينما تُعيد
??
أول قيمة معرّفة.
هذا مهم جدًا عندما نرغب في التعامل مع القيم غير المعرفة أو الفارغة (null/undefined) بطريقة مختلفة عن القيمة 0
.
فمثلًا، إليك هذا الحالة:
height = height ?? 100;
تعيّن هذه الشيفرة البرمجية المتغير height
بالقيمة 100
في حال كان غير معرّف.
دعونا نوازنه بالعامل ||
:
let height = 0; alert(height || 100); // 100 alert(height ?? 100); // 0
هنا، height || 100
يعامل الارتفاع الصفري على أنه غير معرّف، تمامًا مثل القيمة الفارغة null
أو غير المعرفة undefined
أو أي قيمة خاطئة أخرى. إذًا ستكون النتيجة هي 100
.
أما height ?? 100
يُعيد 100
فقط إذا كان المتغيّر height
فارغًا null
أو غير معرّف undefined
. لذلك ستعرضُ الشيفرة السابقة قيمة الارتفاع 0
كما هي.
يعتمد السلوك الأفضل على حالة الاستخدام الّتي نواجهها. عندما يكون الارتفاع صفر تكون القيمة صالحة، فمن الأفضل أن يكون العامل ??
.
أولوية العامل ??
إن أولوية العامل ??
منخفضة نوعًا ما: 5
في جدول MDN.
إذًا تقيّم ??
بعد معظم العمليات الأخرى، ولكن قبل =
و ?
.
إذا احتجنا إلى اختيار قيمة بالعامل ??
في تعبير معقد، ففكر في إضافة الأقواس، هكذا:
let height = null; let width = null; // هام: استخدم الأقواس let area = (height ?? 100) * (width ?? 50); alert(area); // 5000
وإلا إذا حذفنا الأقواس، فإن عملية الضرب *
لها أسبقية أعلى عامل ??
وستُنفذ قبلها.
سيكون ذلك مشابه لهذا المثال:
// يمكن أن تكون غير صحيحة let area = height ?? (100 * width) ?? 50;
هناك أيضًا قيود متعلقة باللغة.
لأسباب تتعلق بالسلامة، يُحظر استخدام العامل ??
مع العاملات &&
و ||
.
لاحظ الخطأ في الصياغة الموجود في الشيفرة أدناه:
let x = 1 && 2 ?? 3; // خطأ في الصياغة
بالتأكيد إن القيد قابل للنقاش، ولكنه أُضيف إلى المواصفات القياسية للغة بغرض تجنب الأخطاء البرمجية، إذ يبدأ الناس في التبديل من ||
إلى ??
.
استخدم الأقواس الصريحة لتجنب الأمر، هكذا:
let x = (1 && 2) ?? 3; // تعمل دون أخطاء alert(x); // 2
الخلاصة
-
يوفر عامل الاستبدال اللاغي
??
طريقة مختصرة لاختيار قيمة "معرّفة" من القائمة.يستخدم لتعيين القيم الافتراضية للمتغيرات:
// أسند القيمة 100 إلى المتغير height إذا كان هذا الأخير فارغًا أو غير معرًف height = height ?? 100;
-
عامل
??
له أولوية منخفضة جدًا، وأعلى قليلًا من العاملات?
و=
. -
يحظر استخدامه مع العاملات
||
أو&&
بدون أقواس صريحة.
ترجمة -وبتصرف- للفصل Nullish coalescing operator '??' من كتاب The JavaScript language
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.