Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

التعامل الأساسي مع الأخطاء

جزء من قسم Fundamentals في رحلة GO على Coddy — الدرس 108 من 109.

معالجة الأخطاء الأساسية هي نمط أساسي في لغة Go حيث تتحقق من وجود أخطاء بعد العمليات التي قد تفشل.

دعونا نتعلم كيفية التعامل مع الأخطاء في Go من خلال إنشاء دالة قسمة بسيطة تُرجع خطأً عند القسمة على صفر:

func divide(a, b int) (int, error) {
    if b == 0 {
        return 0, errors.New("division by zero")
    }
    return a / b, nil
}

تُرجع هذه الدالة قيمتين: نتيجة القسمة وخطأ. إذا كان القاسم صفراً، فإنها تُرجع رسالة خطأ بدلاً من محاولة إجراء القسمة.

الآن، دعونا نرى كيفية استخدام هذه الدالة والتعامل مع أي أخطاء محتملة:

result, err := divide(10, 0)
    
if err != nil {
    fmt.Println("Error occurred:", err)
    return // إيقاف التنفيذ أو معالجة الخطأ
}
    
fmt.Println("Result:", result)

بعد تنفيذ هذا الكود، نتحقق مما إذا كان قد حدث خطأ باستخدام شرط if err != nil. وبما أننا حاولنا القسمة على صفر، فإن الدالة تُرجع خطأً، وسيظهر ما يلي على الشاشة:

Error occurred: division by zero

هذا النمط المتمثل في إرجاع خطأ كقيمة إرجاع أخيرة والتحقق منه فوراً شائع جداً في لغة Go. فهو يسمح لبرنامجك بالتعامل مع الإخفاقات بسلاسة بدلاً من الانهيار.

challenge icon

التحدي

سهل

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

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

ورقة مرجعية

في لغة Go، تُرجع الدوال التي قد تفشل خطأً (error) كآخر قيمة إرجاع:

func divide(a, b int) (int, error) {
    if b == 0 {
        return 0, errors.New("division by zero")
    }
    return a / b, nil
}

تحقق من الأخطاء باستخدام if err != nil:

result, err := divide(10, 0)
    
if err != nil {
    fmt.Println("Error occurred:", err)
    return // Stop execution or handle the error
}
    
fmt.Println("Result:", result)

يسمح هذا النمط للبرامج بالتعامل مع الإخفاقات بسلاسة بدلاً من الانهيار.

جرّب بنفسك

package main

import (
	"errors"
	"fmt"
)

// هذه الوظيفة تقسم x على y وتعيد خطأ إذا كان y يساوي صفراً
func divide(x, y float64) (float64, error) {
	if y == 0 {
		return 0, errors.New("cannot divide by zero")
	}
	return x / y, nil
}

func main() {
	// قيم الاختبار
	numerator := 10.0
	denominator := 0.0
	
	// استدعاء وظيفة القسمة
	result, err := divide(numerator, denominator)
	
	// TODO: تحقق مما إذا كان err ليس nil (يوجد خطأ)
	// إذا كان هناك خطأ، قم بطباعته باستخدام fmt.Println(err)
	// بخلاف ذلك، اطبع النتيجة باستخدام fmt.Printf("Result: %.2f\n", result)
	
	// قم بإزالة هذا السطر وقم بتنفيذ معالجة الأخطاء المناسبة أعلاه
	fmt.Printf("Result: %.2f\n", result)
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Fundamentals