func
تعريف الدوال func
func تعرّف دالة في Go — تدعم إعادة أكثر من قيمة دفعة واحدة، وتسمية قيم الإعادة مسبقًا داخل التوقيع نفسه.
كل دالة في Go تبدأ بـ func، ثم الاسم، ثم قائمة المعاملات بنوعها، ثم نوع القيمة (أو القيم) المُعادة. الميزة المميّزة لـ Go هي إمكانية إعادة أكثر من قيمة من نفس الدالة دون الحاجة لهيكل أو حاوية — الاستخدام الأشهر إعادة نتيجة مع خطأ معًا: (result, error).
يمكن أيضًا تسمية قيم الإعادة داخل التوقيع، فتُهيَّأ تلقائيًا بقيمتها الصفرية وتصبح متاحة كمتغيّرات عادية داخل جسم الدالة. عندها يمكن استخدام return بلا وسائط (naked return) فتُعاد القيم المسمّاة كما هي وقتها — مفيد بالدوال القصيرة فقط، لأنه بالدوال الطويلة يجبر القارئ على البحث عن آخر قيمة أُسندت لكل متغيّر.
الصياغة
func name(param1 Type1, param2 Type2) ReturnType {
// ...
return value
}
func name(params) (result1 Type1, result2 Type2) {
// قيم مسمّاة، تدعم return بلا وسائط
}📄 مثال
func divide(a, b int) (result int, err error) {
if b == 0 {
err = fmt.Errorf("القسمة على صفر")
return // naked return: يعيد result و err الحاليّين
}
result = a / b
return
}
r, err := divide(10, 2)
fmt.Println(r, err) // 5 <nil>أهم النقاط
| العنصر | الوظيفة |
|---|---|
| (a, b int) | معاملات بنفس النوع تُكتب باسم واحد لكل نوع مشترك |
| (int, error) | إعادة أكثر من قيمة — النمط الأشهر لنتيجة مع خطأ |
| (result int) | قيمة إعادة مسمّاة، مهيّأة بالقيمة الصفرية تلقائيًّا |
💡 نصائح عملية
- استخدم naked return فقط بالدوال القصيرة (بضعة أسطر) — بالدوال الطويلة اكتب return صراحةً لوضوح أكبر
- الدوال في Go قيم من الدرجة الأولى — يمكن تخزينها بمتغيّر أو تمريرها لدالة أخرى
⚠️ أخطاء شائعة
- نسيان أن القيم المسمّاة متغيّرات حقيقية — تعديلها بأي مكان بالدالة يؤثر على القيمة المُعادة حتى لو استخدمت return value صراحةً
- الاعتماد على naked return بدالة طويلة يصعّب تتبّع القيمة الفعلية وقت القراءة
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار GO الكامل بالعربي.