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

الدوال المجهولة

الدرس 9 من 19 في دورة الدوال والمؤشرات في Golang على Coddy.

ما تعلمناه بالفعل هو كيفية تعريف دالة باسم، وعندما نحتاج إلى استدعائها، نستخدم ذلك الاسم. ومع ذلك، هناك نوع آخر من الدوال بدون أسماء، ونسمي هذا النوع دالة مجهولة (anonymous function).

تعمل تماماً مثل الدالة البسيطة ولكن مع بعض الاختلافات في طريقة عملها. تسمح لنا هذه الدوال بتعريف إجراءات مباشرة دون الحاجة إلى تعريف دالة في مكان آخر.

دعونا نلقي نظرة على مثال لكيفية تعريف دالة مجهولة:

b := func(x, y int) int { return x - y }
fmt.Println(b(100, 50))

هنا نقوم بتعريف متغير b يخزن دالة مجهولة تقوم بعملية الطرح. عندما نستدعي الدالة، نستخدم ببساطة اسم المتغير b(100, 50).

يمكننا أيضاً استقبال دالة مجهولة كنتيجة من دالة أخرى. على سبيل المثال:

func operation(a int) func(int) int {
    if a == 1 {
        return func(a int) int { return a + 10 }
    } else {
        return func(a int) int { return a * 10 }
    }
}
func main() {
    b := operation(1)
    fmt.Println(b(14))
}

هنا قمنا بتعريف دالة عادية تسمى operation، وستكون النتيجة (القيمة المرجعة) عبارة عن دالة مجهولة <strong>func(int) int</strong> بدلاً من قيمة بسيطة.

نقوم بتعيين القيمة المرجعة لمتغير b. ولأننا نمرر 1 كمعامل للدالة operation، فإن الكتلة البرمجية التي سيتم تنفيذها هي هذه:

return func(a int) int { return a + 10 }

الآن عندما نستدعي دالتنا المجهولة b، نحتاج إلى تمرير قيمة عدد صحيح، على سبيل المثال، 14.

ستكون النتيجة:

24

هذا هو ناتج حساب a + 10 حيث نمرر a التي هي 14(<strong>b(14)</strong>).
 

challenge icon

التحدي

سهل

اكتب دالة مجهولة (anonymous function) تأخذ ثلاثة وسائط صحيحة (integer arguments).

إذا كان الوسيط الأول أكبر من الوسيط الأخير، فقم بإرجاع مجموع جميع الوسائط. وإذا لم يكن كذلك، فقم بإرجاع حاصل ضرب الوسيطين الأول و الأخير.

قم بتخزين نتيجة الدالة داخل متغير يسمى result.

جرّب بنفسك

package main

import "fmt"

func main() {
    // قم بتعريف الدالة المجهولة وتعيينها لمتغير يسمى "result".
 
    
    
    // اطبع النتيجة لا تغير هذا!
    fmt.Println("Result:", result(2, 3, 4))
    fmt.Println("Result:", result(8, 3, 4))
}

جميع دروس الدوال والمؤشرات في Golang