ظروف يودا

في مصطلحات البرمجة ، تُعرف شروط يودا (أو تدوين يودا ) بأسلوب برمجي يُعكس فيه ترتيب جزئي التعبير عن الترتيب المعتاد في العبارة الشرطية . يضع شرط يودا الجزء الثابت من التعبير على الجانب الأيسر من العبارة الشرطية.

تُعد شروط Yoda جزءًا من معايير البرمجة الخاصة بـ Symfony [ 1 ] و WordPress . [ 2 ]

أصل

يُنسب أسلوب البرمجة هذا إلى شخصية يودا من سلسلة حرب النجوم ، الذي يتحدث الإنجليزية (المعروفة داخل عالم السلسلة باسم " غالاكتيك بيسك ") بصيغة غير قياسية [ 3 ] (على سبيل المثال، "عندما تبلغ من العمر 900 عام، لن تبدو جيدًا كما أنت عليه الآن." [ 4 ] [ 5 ] ). يدّعي توماس إم. تورك أنه صاغ مصطلح " تدوين يودا" ونشره لأول مرة على الإنترنت عام 2006. [ 6 ] ووفقًا له، فقد شاع استخدام مصطلح "شرط يودا" لاحقًا على يد فيليكس كلوتير عام 2010.

مثال

عادةً ما تُكتب العبارة الشرطية على النحو التالي:

إذا كانت القيمة تساوي 42 ، فسيتم قراءة الكود كالتالي: "إذا كانت القيمة تساوي 42..."

تُعبّر شروط يودا عن منطق متطابق، ولكنها معكوسة بصريًا:

إذا كانت القيمة تساوي 42 ، فسيتم تنفيذ ما يلي : / * ... */ } // يُقرأ كالتالي: "إذا كانت القيمة 42 تساوي القيمة..."

ميزة

سهولة قراءة المقارنات المتسلسلة منطقيًا

تدعم بعض اللغات، مثل بايثون ، عوامل المقارنة المتسلسلة ("المقارنات") في تركيبها. [ 7 ] وبالتالي، فإن الأسطر التالية متكافئة منطقيًا:

# استخدام المقارنات المتسلسلة: إذا كان 3.14 < y <= 42 : ...# مكافئ منطقيًا لما يلي: إذا كان ( 3.14 < ص ) و ( ص <= 42 ): ...

لاحظ أن الصيغة الثانية تستخدم بشكل طبيعي صيغة يودا في المقارنة على اليسار ( 3.14 < y). انظر إلى السطر نفسه بدون صيغة يودا:

إذا كانت ( ص > 3.14 ) و ( ص <= 42 ): ...

عند كتابة المعادلات الرياضية بخط اليد، يفضل العديد من المؤلفين استخدام الصيغة المتسلسلة ( مثال ، مثال ). أما عند البرمجة بلغة لا تدعم الصيغة المتسلسلة بشكل مباشر، فقد يفضل المؤلف استخدام صيغة يودا، لأنها على الأقل تستحضر بصريًا الصيغة المتسلسلة المألوفة.

اكتشاف أخطاء المبرمجين

في المقارنات المتناظرة ، كالمساواة، لا يؤدي تبديل المعاملين الأيمن والأيسر إلى تغيير سلوك البرنامج . في لغات البرمجة التي تستخدم علامة يساوي واحدة ( ==) لتعبيرات الإسناد ، قد يكتب المستخدم عن طريق الخطأ تعبير إسناد في موضع كان المقصود فيه إجراء مقارنة مساواة.

إذا كان ( myNumber = 42 ) { /* ... */ } // هذا يُسند القيمة 42 إلى myNumber بدلاً من تقييم الشرط المطلوب

باستخدام شروط يودا:

إذا كان ( 42 = رقمي ) { /* ... */ } // هذا خطأ، ولن يتم تجميعه

بما أن التعبيرات الحرفية مثل هذه 42غير قابلة للتخصيص (فهي ليست " قيمًا قابلة للتخصيص ")، فإن الخلط بين التخصيص والمساواة في شروط Yoda غالبًا ما يظهر كخطأ دلالي في وقت الترجمة .

تغيير هدف الإرسال الديناميكي

في معظم لغات البرمجة كائنية التوجه ، يُكتب مُستقبِل استدعاء الدالة على يسار وسائط الاستدعاء الأخرى. في الوقت نفسه، في المقارنات غير القائمة على نموذج يودا، يُكتب المتغير الذي يُقارن على الجانب الأيسر. وبالتالي، تُرسل استدعاءات دوال المقارنة عادةً بشكل ديناميكي على الكائن المُقارن، وهو أمر غير مرغوب فيه دائمًا.

String myString = null ; if ( myString.equals ( " foobar" ) ) { /* ... */ } // هذا يُسبب استثناء NullPointerException في جافا

باستخدام شروط يودا، يمكن إرسال الاستدعاء على كائن ثابت بدلاً من ذلك.

String myString = null ; if (( "foobar") . equals ( myString )) { /* ... */ } // يتم حل هذا إلى خطأ دون طرح استثناء NullPointerException

نقد

تُنتقد شروط يودا لأنها تُؤثر سلبًا على سهولة القراءة من خلال زيادة العبء المعرفي لقراءة الشفرة. [ 8 ] [ 9 ] [ 10 ]

بعض لغات البرمجة (مثل Swift و Kotlin وإصدارات Python الأقدم من 3.8) لا تسمح بتعيين قيم المتغيرات داخل العبارات الشرطية ، وذلك مثلاً باشتراط عدم إرجاع قيمة، أو بتحديد قاعدة ثابتة في قواعدها تمنع احتواء الشروط على عبارات تعيين. في هذه الحالة، يستحيل حدوث هذا الخطأ (أي أنه سيُكتشف كخطأ في بناء الجملة من قِبل المحلل اللغوي قبل بدء تشغيل البرنامج). [11] تُصدر العديد من المترجمات تحذيراً للتعليمات البرمجية من هذا النوع ( على سبيل المثال ، يُشير if (myNumber = 42)خيار GCC إلى اقتراح استخدام أقواس حول عبارة التعيين المستخدمة كقيمة منطقية )، مما يُنبه المبرمج إلى الخطأ المُحتمل. في اللغات الديناميكية مثل JavaScript ، يُمكن لأدوات فحص الأخطاء مثل ESLint أن تُحذر من التعيين داخل عبارة شرطية. [ 12 ] قدمت Python 3.8 تعابير التعيين، لكنها تستخدم عامل الفظ بدلاً من علامة المساواة العادية (=) لتجنب الأخطاء التي تُسبب التباساً بينهما . [ 13 ]-Wall:====

تظهر عيوب أخرى في لغة C++ عند مقارنة الأنواع غير الأساسية، حيث أن == هو عامل، وقد لا توجد دالة مناسبة مُحمّلة لهذا العامل . على سبيل المثال: مقارنة Microsoft CComBSTRمع سلسلة نصية حرفية ، مكتوبة على النحو التالي if (L"Hello" == cbstrMessage)، لا تُقابلها دالة مُحمّلة. [ 14 ]

مراجع

  1. "معايير البرمجة (المساهمة في Symfony)" . Symfony.com . تم الاطلاع عليه بتاريخ 12 نوفمبر 2016 .
  2. "معايير برمجة PHP | دليل معايير البرمجة" . موارد مطوري ووردبريس . تم الاطلاع عليه بتاريخ 25 يوليو 2021 .
  3. بولوم، جيفري ك. (18 مايو 2005). " تحليل صحيفة تريبيون لبنية يودا النحوية؛ سأقدم المزيد من التفاصيل!" . Itre.cis.upenn.edu . سجل اللغة . تم الاطلاع عليه في 22 ديسمبر 2014. إحدى طرق النظر إلى بنية يودا النحوية هي أنها تُظهر علامات على تفضيل بنية OSV (المفعول به - الفاعل - الفعل) كترتيب أساسي في الجملة البسيطة.
  4. "أفضل عشرة اقتباسات ليودا على موقع StarWars.com" . starwars.com . شركة Lucasfilm المحدودة . 26 نوفمبر 2013. تم الاطلاع عليه في 22 ديسمبر 2014. عندما تبلغ من العمر تسعمائة عام، لن تبدو بمظهر جيد كما أنت الآن .
  5. " اقتباسات عن يودا (الشخصية)" . imdb.com . أمازون . تم الاطلاع عليه في 22 ديسمبر 2014. عندما تبلغ من العمر تسعمائة عام، لن تبدو بمظهر جيد، أليس كذلك؟
  6. "تدوين يودا (المعروف أيضًا باسم شرط يودا) - أصل المصطلح" . 17 أبريل 2013. تم الاطلاع عليه بتاريخ 26 ديسمبر 2020 .
  7. "مقارنات" . مرجع مكتبة بايثون . مؤسسة برمجيات بايثون. 2008.
  8. باريس، غريغوار (24 يناير 2020). "لماذا يُنصح بعدم استخدام شروط يودا" . مجتمع المطورين . تم الاطلاع عليه في 30 يناير 2022 .
  9. كلاسيك، مايك (16 أغسطس 2017). "شروط يودا: لماذا لا يجب عليك استخدامها" . mikeclassic.ca . تم الاطلاع عليه في 30 يناير 2022 .
  10. كونتييري، ماكسي (7 فبراير 2023). "رائحة الكود 195 - شروط يودا" . ماكسيميليانو كونتييري - تصميم البرمجيات . تم الاطلاع عليه بتاريخ 22 مايو 2024 .
  11. "المعاملات الأساسية - لغة برمجة سويفت (سويفت 5.6)" . docs.swift.org . أبل . تم الاطلاع عليه بتاريخ 30 يناير 2022 .
  12. "منع استخدام عوامل التعيين في العبارات الشرطية" . eslint.org . تم الاطلاع عليه بتاريخ 29 يناير 2022 .
  13. أنجليكو، كريس؛ بيترز، تيم؛ فان روسوم، غيدو (28 فبراير 2018). "PEP 572 - تعابير الإسناد" . Python.org . تم الاطلاع عليه في 18 يوليو 2021 .
  14. "فئة CComBSTR" . docs.microsoft.com . مايكروسوفت. 3 أغسطس 2021. تم الاطلاع عليه في 30 يناير 2022 .
  • ما هي شروط يودا؟ في أرشيف الإنترنت (تمت أرشفته في 30 سبتمبر 2022)
  • يبدو أن انتقادات تقنية يودا تشير إلى أنها ضارة للغاية، بحجة أنها قد تسبب ضرراً أكثر من نفعها.