# قاعدة push ifs up and fors down: ارفع الشروط إلى المنادي وأنزل الحلقات إلى الدالة

> **المغزى:** المغزى: أغلب الدوال التي يصعب اختبارها لا يصعب اختبارها بسبب طولها، بل بسبب شرط مخبّأ في داخلها يقرر في صمت هل تعمل شيئًا أم لا.

- المصدر: المغزى (https://almaghza.com/a/2026-10-08-push-ifs-up-fors-down/)
- التاريخ: 27 ربيع الآخر - 8 أكتوبر 2026 (2026-10-08)
- القسم: برمجيات
- الوسوم: معمارية البرمجيات، جودة الكود، اختبار البرمجيات

عادت إلى النقاش في 8 أكتوبر 2026، عبر تدوينة تحليلية لـ Debasish Ghosh انتشرت على Hacker News وlobste.rs، قاعدة قصيرة في بناء الكود أصلها في دليل Tiger Style الخاص بقاعدة البيانات TigerBeetle. ونصها: push ifs up and fors down.

ويشرح الدليل القاعدة بأن التحكم في مسار التنفيذ يجب أن يتمركز في مكان واحد. فعند تقسيم دالة كبيرة، تبقى جمل if وswitch في الدالة الأم، وتنتقل الأجزاء التي لا تتفرع إلى دوال مساعدة. وبذلك تتولى دالة واحدة كل التشعب، ولا تهتم البقية به أصلًا.

والقاعدة في الحقيقة شقّان منفصلان. الأول رفع الشرط إلى من ينادي الدالة. فالدالة التي تتحقق من شرط ثم لا تفعل شيئًا إذا لم يتحقق تخفي القرار في داخلها، ولا يعرف المنادي هل عملت شيئًا أم لا. ومن الأمثلة في تدوينة matklad الأصلية، المنشورة في 15 نوفمبر 2023، دالة تستقبل قيمة قد تكون فارغة وتتعامل مع الفراغ داخلها. والبديل أن تستقبل قيمة مؤكدة، ويتولى المنادي حالة الفراغ قبل النداء.

والشق الثاني إنزال الحلقة إلى الأسفل. فبدل نداء دالة لعنصر واحد ألف مرة، تُنادى مرة واحدة لألف عنصر. فتصبح الحلقة داخل الدالة، ويقل عدد مرات الدخول والخروج.

وقد يكون الشق الأول هو الأنفع للمبرمجين في بداية طريقهم، لأن صعوبة اختبار كثير من الدوال تأتي من شرط مخبّأ في داخلها أكثر مما تأتي من طولها.

لكن القاعدة ليست مطلقة. فرفع كل الشروط إلى الأعلى قد يؤدي إلى تكرار الشرط نفسه عند كل منادٍ للدالة.

## المصادر

- [دليل Tiger Style الخاص بـ TigerBeetle](https://raw.githubusercontent.com/tigerbeetle/tigerbeetle/main/docs/TIGER_STYLE.md)
- [تدوينة matklad الأصلية](https://matklad.github.io/2023/11/15/push-ifs-up-and-fors-down.html)
- [تدوينة Debasish Ghosh التحليلية](https://debasishg.github.io/blog/push-ifs-up-fors-down/)
