مشغل إلفيس

في بعض لغات البرمجة ، يُعدّ عامل Elvis ، الذي يُكتب غالبًا ?:، عاملًا ثنائيًا يُعيد المعامل الأول إذا كانت قيمته صحيحة منطقيًا (وفقًا لاتفاقية خاصة باللغة، أي قيمة صحيحة )، أو يُعيد المعامل الثاني إذا لم يكن المعامل الأول صحيحًا. أي أنه دائرة مختصرةOR تُعيد معاملها الأول الصحيح.
استُلهمت صيغة عامل Elvis من عامل الشرط الثلاثي ، ، لأن تعبير عامل Elvis مكافئ تقريبًا لتعبير الشرط الثلاثي .? :A ?: BA ? A : B
يُطلق عليه اسم "عامل إلفيس" لأن الرمز ?:، عند النظر إليه من الجانب، يشبه رمزًا تعبيريًا لإلفيس بريسلي بتسريحة شعره المميزة . [ 1 ]
يُعدّ عامل دمج القيم الفارغة عاملاً مشابهاً ، حيث يُستبدل التحقق من صحة القيمة المنطقية (صوابها أو عدم صحتها) بتحقق من عدم كونها فارغة . يُكتب هذا عادةً على النحو التالي ??، ويمكن رؤيته في لغات مثل C# [ 2 ] أو Dart [ 3 ] .
صيغ بديلة
في العديد من لغات البرمجة، مثل Common Lisp و Clojure و Lua و Object Pascal و Perl و Python و Ruby و JavaScript ، لا حاجة إلى عامل Elvis، لأن عامل الفصل المنطقي في اللغة (عادةً ||or or) يعمل بشكل مختصر ، حيث يُعيد المعامل الأول إذا كانت قيمته صحيحة ، وإلا يُعيد المعامل الثاني، والذي قد يكون صحيحًا أو خاطئًا (بدلاً من قيمة منطقية صحيحة أو خاطئة ، كما هو الحال في لغتي C وC++). هذه الدلالات مطابقة لدلالات عامل Elvis.
مثال
متغير منطقي
في لغة تدعم عامل التشغيل Elvis، شيء من هذا القبيل:
x = f() ?: g()
سوف يتم تعيينها xمساوية لنتيجة f()إذا كانت تلك النتيجة صحيحة، ولنتيجة خلاف g()ذلك.
وهو مكافئ لهذا المثال، باستخدام عامل الشرط الثلاثي :
x = f() ? f() : g()
باستثناء أنها لا تُقيّم f()مرتين إذا كانت النتيجة صحيحة. لاحظ إمكانية حدوث سلوك غير متوقع إذا f()لم تكن دالة مستقلة عن الحالة تُرجع دائمًا نفس النتيجة.
متغير مرجع الكائن
سينتج عن هذا الكود مرجع إلى كائن مضمون ألا يكون فارغًا. f()تُرجع الدالة مرجعًا إلى كائن بدلًا من قيمة منطقية، وقد تُرجع قيمة فارغة، والتي تُعتبر عمومًا قيمة خاطئة.
x = f() ?: "default value"
اللغات التي تدعم مشغل إلفيس
- في لغتي GNU C و C++ (أي: في C و C++ مع إضافات GCC )، يكون المعامل الثاني للمعامل الثلاثي اختياريًا. [ 4 ] وقد كان هذا هو الحال منذ إصدار GCC 2.95.3 على الأقل (مارس 2001)، ويبدو أنه المعامل الأصلي لـ Elvis. [ 5 ]
- في لغة أباتشي جروفي
?:، يُوثَّق "معامل إلفيس" كمعامل مستقل؛ [ 6 ] أُضيفت هذه الميزة في جروفي 1.5 [ 7 ] (ديسمبر 2007). وعلى عكس لغتي جنو سي وبي إتش بي، لا تسمح جروفي ببساطة?:بحذف المعامل الثاني في المعاملات الثلاثية ؛ بل?:يجب كتابة المعاملات الثنائية كمعامل واحد، دون أي مسافة بيضاء بين المعاملات. - في لغة PHP ، من الممكن حذف الجزء الأوسط من عامل التشغيل الثلاثي منذ PHP 5.3. [ 8 ] (يونيو 2009).
- تحتوي لغة برمجة فانتوم على
?:عامل التشغيل الثنائي الذي يقارن معامله الأول معnull. - في لغة كوتلن ، يُعيد عامل إلفيس طرفه الأيسر إذا لم يكن فارغًا، وطرفه الأيمن في غير ذلك. [ 9 ] من الأنماط الشائعة استخدامه مع
return، كما يلي:valfoo=bar()?:return - في لغة Gosu ،
?:يقوم المعامل بإرجاع المعامل الأيمن إذا كان المعامل الأيسر فارغًا أيضًا. - في لغة C# ، يُشار إلى عامل الشرط الفارغ باسم "عامل إلفيس" [ 10 ] ، لكنه لا يؤدي الوظيفة نفسها. بل يقوم بها عامل دمج القيم الفارغة .
?.?? - في ColdFusion و CFML ، تم تقديم عامل Elvis باستخدام
?:الصيغة. - تحتوي لغة البرمجة Xtend على عامل تشغيل Elvis. [ 11 ]
- في قوالب الإغلاق من جوجل ، يعتبر عامل Elvis عامل دمج فارغ ، وهو مكافئ لـ . [ 12 ]
isNonnull($a) ? $a : $b - في برنامج Ballerina ، يُعيد عامل Elvis قيمة المتغير إذا لم تكن فارغة. وإلا، يُعيد قيمة المتغير . [ 13 ]
L ?: RLR - في لغة جافا سكريبت ، يُعدّ عامل دمج القيم الفارغة (
??) عاملاً منطقياً يُعيد قيمة معامله الأيمن عندما يكون معامله الأيسر فارغاًnullأوundefinedغير فارغ، وإلا يُعيد قيمة معامله الأيسر. [ 14 ] - في لغة بيرل، يوجد عامل فصل منطقي قصير الدائرة
||، وله أسبقية أقل مماثلةor. [ 15 ] يختلف هذان العاملان عن عامل "أو" الثنائي|الذي يُقيّم كلا المعاملين دون اختصار الدائرة. يوجد أيضًا عامل إسناد مُقابل||=يُقيّم معامله الأيمن ويُسنده إلى المعامل الأيسر ما لم تكن القيمة المنطقية للمعامل الأيسر صحيحة. كما يوجد عامل "أو" مُعرّف قصير الدائرة يُقيّم//معامله الأيمن ويُعيد قيمته فقط إذا كان المعامل الأيسر غير مُعرّف. أخيرًا، عامل الإسناد المُقابل هو//=. عوامل "أو " الحصرية المُشابهة ليست عوامل "إلفيس" لأنها لا تُقصر الدائرة. من عوامل "الفصل" المنطقية الأخرى عوامل " و" المنطقية&&وand، لكن سلوكها مُعاكس لسلوك عامل "إلفيس" .
انظر أيضاً
?:أو عامل الشرط ، عند استخدامه كعامل ثلاثي- عامل دمج القيم الفارغة ،
??عامل - مشغل الملاحة الآمنة ، غالبًا
?. - مشغل سفن فضائية
<=> - نوع الخيار
مراجع
- ↑ جويس فاريل (7 فبراير 2013). برمجة جافا . سينجايج ليرنينج. ص 276. ISBN 978-1285081953يُطلق
على المعامل الجديد اسم معامل إلفيس لأنه يستخدم علامة استفهام ونقطتين رأسيتين معًا (?:)؛ إذا نظرت إليه من الجانب، فإنه يذكرك بإلفيس بريسلي.
- ↑ "عامل ??" . مرجع لغة C# . مايكروسوفت . تم الاطلاع عليه في 5 ديسمبر 2018 .
- ↑ "العبارات الشرطية" . لغة دارت . جوجل.
- ↑ "الشروط (باستخدام مجموعة مترجمات جنو (GCC)): الشروط مع المعاملات المحذوفة" . gcc.gnu.org . تم الاطلاع عليه في 14 يناير 2026 .
- ↑ "استخدام ونقل مجموعة مترجمات GNU (GCC): ملحقات C" . gcc.gnu.org .
- ↑ "مشغل إلفيس (?: )" .
- ↑ "لغة برمجة أباتشي جروفي - ملاحظات إصدار جروفي 1.5" . groovy-lang.org .
- ↑ "PHP: عوامل المقارنة - دليل المستخدم" . موقع PHP الإلكتروني . تم الاطلاع عليه بتاريخ 17 فبراير 2014 .
- ↑ "الأمان من القيم الفارغة - لغة برمجة كوتلن" . كوتلن .
- ↑ البحاري، يوسف؛ البحاري، بن (2015). C # 6.0 باختصار (6 ed.). أورايلي وسائل الإعلام. ص. 59. ردمك 978-1491927069.
- ↑ إيفتينج، سفين. "Xtend - Expressions" . eclipse.org .
- ↑ "قوالب الإغلاق - التعبيرات" . GitHub . 29 أكتوبر 2021.
- ↑ "إلفيس أوبريتور - لغة برمجة باليرينا" . باليرينا . مؤرشف من الأصل في 20 ديسمبر 2018. تم الاطلاع عليه في 19 ديسمبر 2018 .
- ↑ "عامل دمج القيم الفارغة (؟؟) - جافا سكريبت | MDN" . developer.mozilla.org . تم الاطلاع عليه في 5 يناير 2023 .
- ↑ "perlop" . تم الاسترجاع في 9 يوليو 2025 .
- العمليات الثنائية
- البنى الشرطية
- المشغلون (البرمجة)
- إلفيس بريسلي
