الدوال المجهولة
الدرس 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>).
التحدي
سهلاكتب دالة مجهولة (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
1مقدمة
مقدمة4إعادة بناء دوال Strings في Go
السلاسل النصية في Golangدالة Joinدالة Containsدالة Indexتحدي المراجعة رقم 1