رفض المهمة إذا كان اسمها فارغا
في jobrunner لا نريد متابعة التنفيذ إذا لم يكن للمهمة اسم.
يبقى نوع JobStatus و ثوابته في الملف كما عرفناها في الدرس السابق. لا نحتاج إلى متغير محلي للحالة خلال خطوات التحكم القادمة. سيبقى النوع جزءا من المشروع حتى نضعه داخل Job في الدرس 20.
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). و إذا كان الشرط غير صحيح، يمكن للبرنامج متابعة المسار الآخر.
if condition {
// executed when the condition is true
} else {
// executed when the condition is false
}في Go لا نضع الشرط بين أقواس () كما هو الحال في بعض اللغات، لكن الأقواس المعكوفة {} إلزامية دائما، حتى لو كان محتوى الشرط يتكون من سطر واحد.
تحديث jobrunner
سنضيف أول تحقق: لا نتابع إذا كان jobName فارغا.
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)
}شغل البرنامج باستخدام:
go run main.goلاحظ أننا استخدمنا return للخروج مبكرا عند فشل التحقق فلا نحتاج إلى كتابة else بعده لأن البرنامج لن يصل إلى سطر job ok إذا كان الاسم فارغا.
بما أن اسم المهمة صحيح، سيطبع jobrunner السطر job ok: send welcome email. غير قيمة jobName إلى نص فارغ "" ثم شغل البرنامج مرة أخرى، لتلاحظ كيف يتوقف مبكرا و يعرض رسالة الخطأ قبل أن يصل إلى سطر job ok.
هذه أول مرة يتخذ فيها البرنامج قرارا بناء على البيانات التي يستقبلها.

التحدي
في المحرر، افتح ملف main.go و أضف عملية تحقق لاسم المهمة.
إذا كان jobName فارغا، اطبع الرسالة التالية ثم أوقف البرنامج باستخدام return:
invalid job: name is emptyأما إذا كان يحتوي على اسم فاطبع:
job ok: <job name>بعدها شغل البرنامج باستخدام:
go run main.goبما أن اسم المهمة صحيح حاليا، سيطبع البرنامج سطر job ok: send welcome email. تأكد أن المخرجات مطابقة تماما ثم اضغط على زر تشغيل و تحقق لإكمال الدرس.
بعد إكمال الدرس، جرب تفريغ قيمة jobName و شغل البرنامج مرة أخرى، لتلاحظ كيف يتوقف مبكرا و يعرض رسالة الخطأ.
جرب مدخلا جديدا
قبل التشغيل، افترض أن jobName يساوي " "، أي مسافة واحدة. هل يصل البرنامج إلى return أم إلى job ok؟ اكتب توقعك و علله بنتيجة المقارنة مع "" ثم غير القيمة و شغل البرنامج للتحقق.
راجع تفسيرك بعد التجربة
النص الذي يحتوي على مسافة لا يساوي النص الفارغ. لذلك يكون شرط if غير صحيح و يصل التنفيذ إلى job ok. لا يزيل هذا التحقق المسافات من الاسم. قارن تفسيرك بسبب اختيار المسار، لا بالمخرجات وحدها ثم أعد اسم المهمة الأصلي قبل التحقق من الحل.
الخلاصة
أصبح jobrunner الآن قادرا على اتخاذ أول قرار أثناء التنفيذ بدلا من تنفيذ نفس الأوامر دائما.
تعلمت استخدام if لاختيار مسار التنفيذ بناء على شرط معين، كما أضفنا أول خطوة من خطوات التحقق من اسم المهمة.
في الدرس القادم سنتعرف على switch و كيف يساعدنا على التعامل مع عدة حالات بطريقة أكثر تنظيما.