AzLearn

تجميع فاتورة بسيطة

Build a Simple Invoice Calculator

تطبيق ~25 دقيقة

تجميع فاتورة بسيطة — Build a Simple Invoice Calculator

بعد المتغيرات والنصوص والتحكم في التدفق والدوال، نحتاج تمريناً يربطها في شيء يشبه كود العمل اليومي: حساب فاتورة بسيطة. في هذا الـ walkthrough سنبني الفاتورة خطوة بخطوة — كل خطوة تضيف طبقة فوق السابقة.

الفكرة ليست حفظ صيغة حساب الضريبة، بل أن ترى كيف يتحول وصف بسيط مثل “احسب إجمالي الأصناف ثم أضف ضريبة 15%” إلى كود مقروء ومنظّم. هذا الشكل ستُقابله كثيراً في المشاريع الحقيقية: قائمة أصناف، كمية، ضريبة، إجمالي، ثم تقرير واضح للمستخدم.

انتبه: هذا الـ walkthrough يستخدم float للتبسيط التعليمي. في الأنظمة الإنتاجية الحقيقية نُفضّل تمثيل الأموال بأعداد صحيحة (هللات) لتجنب مشاكل الأرقام العشرية. لكن الآن نركز على البنية والدوال والقراءة.

الخطوة 1: احسب إجمالي صنف واحد

نبدأ بأبسط شيء — حساب إجمالي صنف بسعره وكميته:

main.go

لاحظ أننا استخدمنا :.2f في f-string للحصول على رقمين بعد الفاصلة. الفواتير دائماً تحتاج هذا التنسيق لأن المال يُعرض بدقة ثابتة.

تحدي — Challenge

الخطوة 2: أضف ضريبة القيمة المضافة (15%)

الآن ننقل الحساب إلى دوال ونضيف ضريبة القيمة المضافة:

main.go

لماذا نضع الحسابات في دوال بدلاً من كتابتها مباشرة؟ لأن الدالة تُسمّي النية. add_vat(subtotal) أوضح من subtotal * 1.15. وإذا تغيرت نسبة الضريبة ستعدّل في مكان واحد فقط.

تحدي — Challenge

الخطوة 3: نسّق سطر الفاتورة

الفاتورة ليست مجرد أرقام — يجب أن تكون قابلة للقراءة:

main.go

تنسيق f-string المستخدم هنا:

  • :<25 — نص محاذى لليسار بعرض 25
  • :>9.2f — رقم عشري محاذى لليمين بعرض 9 ورقمين عشريين
تحدي — Challenge

الخطوة 4: تعامل مع القائمة الفارغة

برنامج قوي يتعامل مع الحالات الاستثنائية. ماذا لو كانت قائمة الأصناف فارغة؟

main.go

if not items: في Python يعني “إذا كانت القائمة فارغة” — فارغة تعادل False في Python. هذا أنظف من if len(items) == 0.

تحدي — Challenge

الخطوة 5: التكامل الكامل

الآن ندمج كل شيء في برنامج كامل يطبع فاتورة احترافية:

main.go

ما تعلمناه من هذا الـ Walkthrough

كل خطوة بنينا فيها طبقة جديدة:

  1. بيانات + حساب مباشر — أبسط شكل للكود
  2. دوال صغيرة — كل حساب له اسم يشرح نيّته
  3. تنسيق النص — f-strings مع تنسيق الأعمدة
  4. معالجة الحالات الاستثنائية — القائمة الفارغة
  5. التكامل — دالة رئيسية تُنسّق الكل وتُفوّض الحسابات لدوال أصغر

هذا هو النمط الأساسي في الكود الاحترافي: قسّم المشكلة إلى قطع صغيرة، أعطِ كل قطعة دالة باسم واضح، ثم اجمعها في دالة رئيسية تعكس المنطق الكلي للبرنامج.

عندما تقرأ كودك بعد الانتهاء يجب أن تستطيع شرح كل سطر بجملة بسيطة: “احسب إجمالي الصنف”، “أضف الضريبة”، “نسّق السطر”، “اطبع الفاتورة”. إذا احتجت فقرة كاملة لشرح سطر واحد فهذه إشارة لإعادة التنظيم.