MASTRILOالدورة/رفض المهمة إذا كان اسمها فارغا
MASTRILO

رفض المهمة إذا كان اسمها فارغا

في jobrunner لا نريد متابعة التنفيذ إذا لم يكن للمهمة اسم.

يبقى نوع JobStatus و ثوابته في الملف كما عرفناها في الدرس السابق. لا نحتاج إلى متغير محلي للحالة خلال خطوات التحكم القادمة. سيبقى النوع جزءا من المشروع حتى نضعه داخل Job في الدرس 20.

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"
 
	fmt.Println(name, version)
	fmt.Println("max attempts:", maxAttempts)
}

إذا كان jobName فارغا، يجب أن يطبع البرنامج خطأ و يتوقف. أما إذا كان الاسم موجودا فيستطيع متابعة العمل. نحتاج إلى قرار يعتمد على القيمة التي أمامنا.

تنفذ if مجموعة من الأوامر عندما يكون الشرط صحيحا (true). و إذا كان الشرط غير صحيح، يمكن للبرنامج متابعة المسار الآخر.

go
if condition {
	// executed when the condition is true
} else {
	// executed when the condition is false
}

في Go لا نضع الشرط بين أقواس () كما هو الحال في بعض اللغات، لكن الأقواس المعكوفة {} إلزامية دائما، حتى لو كان محتوى الشرط يتكون من سطر واحد.

تحديث jobrunner

سنضيف أول تحقق: لا نتابع إذا كان jobName فارغا.

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"
 
	fmt.Println(name, version)
	fmt.Println("max attempts:", maxAttempts)
 
	if jobName == "" { 
		fmt.Println("invalid job: name is empty") 
		return
	} 
 
	fmt.Println("job ok:", jobName) 
}

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

bash
go run main.go

لاحظ أننا استخدمنا return للخروج مبكرا عند فشل التحقق فلا نحتاج إلى كتابة else بعده لأن البرنامج لن يصل إلى سطر job ok إذا كان الاسم فارغا.

بما أن اسم المهمة صحيح، سيطبع jobrunner السطر job ok: send welcome email. غير قيمة jobName إلى نص فارغ "" ثم شغل البرنامج مرة أخرى، لتلاحظ كيف يتوقف مبكرا و يعرض رسالة الخطأ قبل أن يصل إلى سطر job ok.

هذه أول مرة يتخذ فيها البرنامج قرارا بناء على البيانات التي يستقبلها.

رسم لمسار التحقق: الاسم الفارغ يصل الى return و الاسم الموجود يصل الى job ok
بوابة القرار: الاسم الفارغ يوقف التنفيذ و الاسم الموجود يسمح بمتابعة البرنامج.

التحدي

في المحرر، افتح ملف main.go و أضف عملية تحقق لاسم المهمة.

إذا كان jobName فارغا، اطبع الرسالة التالية ثم أوقف البرنامج باستخدام return:

text
invalid job: name is empty

أما إذا كان يحتوي على اسم فاطبع:

text
job ok: <job name>

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

bash
go run main.go

بما أن اسم المهمة صحيح حاليا، سيطبع البرنامج سطر job ok: send welcome email. تأكد أن المخرجات مطابقة تماما ثم اضغط على زر تشغيل و تحقق لإكمال الدرس.

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

جرب مدخلا جديدا

قبل التشغيل، افترض أن jobName يساوي " "، أي مسافة واحدة. هل يصل البرنامج إلى return أم إلى job ok؟ اكتب توقعك و علله بنتيجة المقارنة مع "" ثم غير القيمة و شغل البرنامج للتحقق.

راجع تفسيرك بعد التجربة

النص الذي يحتوي على مسافة لا يساوي النص الفارغ. لذلك يكون شرط if غير صحيح و يصل التنفيذ إلى job ok. لا يزيل هذا التحقق المسافات من الاسم. قارن تفسيرك بسبب اختيار المسار، لا بالمخرجات وحدها ثم أعد اسم المهمة الأصلي قبل التحقق من الحل.

الخلاصة

أصبح jobrunner الآن قادرا على اتخاذ أول قرار أثناء التنفيذ بدلا من تنفيذ نفس الأوامر دائما.

تعلمت استخدام if لاختيار مسار التنفيذ بناء على شرط معين، كما أضفنا أول خطوة من خطوات التحقق من اسم المهمة.

في الدرس القادم سنتعرف على switch و كيف يساعدنا على التعامل مع عدة حالات بطريقة أكثر تنظيما.

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

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

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

Control Flow

1.رفض المهمة إذا كان اسمها فارغا

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