المولدات
المولد (Generator) هو دالة خاصة تُنتج قيماً واحدة تلو الأخرى باستخدام الكلمة المفتاحية أنتج. بدلاً من إرجاع كل النتائج دفعة واحدة، المولد "يتوقف مؤقتاً" عند كل أنتج ثم يكمل من حيث توقف.
التركيب الأساسي
sad
مولد دالة عدّ(من، إلى)
متغير ن = من
بينما (ن <= إلى)
أنتج ن
ن += 1
نهاية
نهاية
# الاستخدام مع لكل
لكل رقم في عدّ(1، 5)
اطبع_سطر(رقم) # 1 2 3 4 5
نهايةمتى تستخدم المولدات؟
| الحالة | لماذا مولد؟ |
|---|---|
| بيانات كبيرة جداً | لا تحتاج تحميلها كلها في الذاكرة |
| تسلسلات لا نهائية | مستحيل إنشاء مصفوفة لا نهائية |
| معالجة تدريجية | معالجة كل عنصر فور إنتاجه |
| أداء أفضل | بدء فوري دون انتظار إنتاج الكل |
مولد لا نهائي
sad
مولد دالة أرقام_لا_نهائية(من = 0)
متغير ن = من
بينما (صحيح)
أنتج ن
ن += 1
نهاية
نهاية
# خذ أول 5 فقط
لكل رقم في أخذ(أرقام_لا_نهائية()، 5)
اطبع_سطر(رقم) # 0 1 2 3 4
نهايةمثال عملي: مولد فيبوناتشي
sad
مولد دالة فيبوناتشي()
متغير أ = 0
متغير ب = 1
بينما (صحيح)
أنتج أ
متغير مؤقت = أ + ب
أ = ب
ب = مؤقت
نهاية
نهاية
# أول 10 أرقام فيبوناتشي
لكل ف في أخذ(فيبوناتشي()، 10)
اطبع(ف + " ") # 0 1 1 2 3 5 8 13 21 34
نهايةالفرق بين ارجع وأنتج
ارجعتنهي الدالة نهائياً وتُرجع قيمة واحدةأنتجتُرجع قيمة ثم "تتوقف مؤقتاً" — الدالة تكمل من نفس النقطة عند الطلب التالي
نهاية نهاية
أول 10 أعداد أولية
لكل عدد في أخذ(الأعداد_الأولية()، 10) اطبع_سطر(عدد) نهاية