MASTRILOالدورة/تكرار تشغيل المهمة لعدد محدد من المرات
MASTRILO

تكرار تشغيل المهمة لعدد محدد من المرات

في الدرس السابق تأكدنا من أن jobName موجود و أن jobType مدعوم. الآن نريد محاكاة أكثر من محاولة لتشغيل المهمة.

go
package main
 
import "fmt"
 
const (
	version     = "v0.1"
	maxAttempts = 3
)
 
type JobStatus int
 
const (
	StatusPending JobStatus = iota
	StatusRunning
	StatusSucceeded
	StatusFailed
)
 
func main() {
	name := "jobrunner"
	jobName := "send welcome email"
	jobType := "email"
 
	fmt.Println(name, version)
	fmt.Println("max attempts:", maxAttempts)
 
	if jobName == "" {
		fmt.Println("invalid job: name is empty")
		return
	}
 
	switch jobType {
	case "email", "report":
		// valid type
	default:
		fmt.Println("invalid job: unknown type", jobType)
		return
	}
}

نستخدم for عندما نعرف أن المهمة تحتاج عددا محددا من المحاولات.

go
for attempt := 1; attempt <= maxAttempts; attempt++ {
	fmt.Println("attempt", attempt, ":", "running", jobName)
}

يبدأ attempt بالقيمة 1. تستمر الحلقة ما دام لا يتجاوز maxAttempts ثم يزيد attempt بعد كل محاولة. عندما يصل إلى 4، ينتهي الشرط و تتوقف الحلقة.

تحديث jobrunner

بعد أن أصبحت المهمة صالحة، يمكننا تكرار تنفيذ نفس العملية عدة مرات.

سنستخدم ذلك الآن لطباعة كل محاولة نحاكيها اعتمادا على قيمة maxAttempts. و في الدروس القادمة سنحول هذه المحاكاة إلى آلية إعادة تنفيذ حقيقية (Retry).

بما أن دور switch هنا أصبح التحقق من النوع فقط، نترك حالة email و report تمر دون طباعة. بعد ذلك نحاكي المحاولات داخل الحلقة بطباعة رقم كل محاولة.

go
func main() {
	name := "jobrunner"
 
	jobName := "send welcome email"
	jobType := "email"
 
	fmt.Println(name, version)
	fmt.Println("max attempts:", maxAttempts)
 
	if jobName == "" {
		fmt.Println("invalid job: name is empty")
		return
	}
 
	switch jobType {
	case "email", "report":
		// valid type
	default:
		fmt.Println("invalid job: unknown type", jobType)
		return
	}
 
	for attempt := 1; attempt <= maxAttempts; attempt++ { 
		fmt.Println("attempt", attempt, ":", "running", jobName) 
	} 
 
	fmt.Println("done") 
}

شغل البرنامج باستخدام:

bash
go run main.go

ستلاحظ أن الحلقة تنفذ ثلاث مرات لأن قيمة maxAttempts تساوي 3. جرب تغيير قيمة maxAttempts إلى 5 ثم شغل البرنامج مرة أخرى. ستلاحظ أن عدد مرات التكرار يتغير مباشرة دون الحاجة إلى تعديل الحلقة نفسها.

ساعة تعرض ثلاث محاولات متتابعة تنتهي بعلامة الإنجاز
توضح الحلقة ثلاث محاولات قبل الانتقال إلى النهاية.

هذا مثال بسيط لكنه يوضح كيف يمكن استخدام for لتكرار تنفيذ أي جزء من البرنامج.

في الدروس القادمة سنستخدمها لمعالجة عدة مهام و لاحقا لبناء آلية إعادة المحاولة (Retry).

التحدي

في المحرر، افتح ملف main.go و أضف حلقة for تطبع رسالة تحاكي محاولة تنفيذ المهمة اعتمادا على قيمة maxAttempts ثم اطبع done بعد نهاية الحلقة.

يجب أن تكون المخرجات النهائية بالشكل التالي:

text
jobrunner v0.1
max attempts: 3
attempt 1 : running send welcome email
attempt 2 : running send welcome email
attempt 3 : running send welcome email
done

بعدها شغل البرنامج باستخدام:

bash
go run main.go

تأكد أن المخرجات مطابقة تماما ثم اضغط على زر تشغيل و تحقق لإكمال الدرس.

بعد إكمال الدرس، جرب تغيير قيمة maxAttempts إلى 5 و لاحظ كيف يتغير عدد أسطر المحاكاة دون تعديل الحلقة نفسها.

الخلاصة

أصبح jobrunner الآن قادرا على تكرار تنفيذ جزء من البرنامج باستخدام الحلقة for.

تعلمت استخدام for مع عداد لتكرار سطر المحاكاة حتى يصل عدد المحاولات إلى maxAttempts.

في الدرس القادم سنبدأ بتقسيم الكود إلى دوال (Functions)، حتى يصبح jobrunner أكثر تنظيما و أسهل في التطوير.

اختبر معلوماتك

سجّل دخولك للإجابة على الأسئلة وحفظ تقدّمك.

سجّل الدخول
اللوحات
نوع الخط
حجم الخط
أكملت 0 من 69 درس

Control Flow

3.تكرار تشغيل المهمة لعدد محدد من المرات

Learn Go by Building a CLI1469 تكرار تشغيل المهمة لعدد محدد من المراتمكافأة إكمال الدرس إضافة إلى نقاط أنشطته. 10 XP. تُمنح المكافأة مرة واحدة فقط.