أساسيات الدوال وتواقيعها
المعاملات وأنواع الإرجاع وقواعد استدعاء الدوال
أساسيات الدوال وتواقيعها درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.
تعريف دالة
تُعرَّف الدوال في Go باستخدام الكلمة المفتاحية func:
func greet(name string) string {
return "Hello, " + name
}المعلمات والوسائط
تُكتب المعلمات مع أنواعها على هيئة أزواج name type. ويمكن للمعلمات المتعددة من النوع نفسه مشاركة تعيين النوع:
func add(x, y int) int {
return x + y
}
func rect(w, h float64) float64 {
return w * h
}دوال بلا قيمة إرجاع
تحذف الدوال التي لا تُرجع قيمة نوع الإرجاع ببساطة. وتُرجع ضمنيًا عند وصول التنفيذ إلى نهايتها:
func printBanner(title string) {
fmt.Println("=====", title, "======")
}استدعاء الدوال
استدعِ الدالة باسمها مع الأقواس والوسائط المطابقة:
result := add(3, 4) // 7
fmt.Println(greet("Go")) // Hello, Go
printBanner("Welcome")الدوال كقيم من الدرجة الأولى
تُعد الدوال في Go قيمًا من الدرجة الأولى — إذ يمكن إسنادها إلى متغيرات وتمريرها كوسائط:
apply := func(n int, f func(int) int) int {
return f(n)
}
double := func(n int) int { return n * 2 }
fmt.Println(apply(5, double)) // 10أنواع الدوال
يمكنك تعريف أنواع دوال مُسمّاة للحصول على تواقيع أوضح:
type Transform func(int) int
func applyAll(n int, fns []Transform) int {
for _, f := range fns {
n = f(n)
}
return n
}الدوال العودية
تدعم Go الاستدعاء الذاتي. انتبه إلى عمق المكدس — إذ تنمو مكدسات goroutine في Go ديناميكيًا، لكن الاستدعاء الذاتي غير المحدود يظل يسبب تجاوزًا للمكدس:
func factorial(n int) int {
if n <= 1 {
return 1
}
return n * factorial(n-1)
}اصطلاحات تسمية الدوال
اصطلاحات تسمية الدوال في Go:
- استخدم
MixedCapsللدوال المُصدَّرة أوmixedCapsللدوال غير المُصدَّرة - استخدم أسماء قصيرة موجّهة نحو الإجراء، مثل
NewوGetوParseوWrite - تجنّب
GetXللحصول على القيم البسيطة — استخدمXفقط - للمتنبئات المنطقية:
IsValidوHasPrefix
دالة init()
تُنفَّذ دالة init() الخاصة تلقائيًا عند تحميل الحزمة، قبل main():
- لا تقبل أي وسائط ولا تُرجع شيئًا
- يمكن أن تحتوي الحزمة على عدة دوال init()
- استخدمها للإعداد الذي يُنفّذ مرة واحدة، مثل تسجيل برامج التشغيل
الدالة مقابل الطريقة
لا ترتبط الدالة بأي نوع. أما الطريقة فلها مستقبل، وسيُشرح ذلك في درس البُنى والطرائق. ويستخدم كلاهما الكلمة المفتاحية func:
// Function
func max(a, b int) int { ... }
// Method
func (c Counter) Value() int { ... }تحقق سريع
هل يمكن لدالة في Go إرجاع قيم متعددة؟
مراجعة: أساسيات الدوال
تتميز دوال Go بالمرونة والتعبير:
func name(params) returnType { }- يمكن للمعلمات من النوع نفسه مشاركة تعيين النوع
- الدوال قيم من الدرجة الأولى
- يمكن تعريف أنواع دوال لتوقيعات قابلة لإعادة الاستخدام
- الاستدعاء الذاتي مدعوم، وتُنفَّذ init() عند تحميل الحزمة
التالي: التعمق في قيم الإرجاع المتعددة.
الأسئلة الشائعة
هل درس «أساسيات الدوال وتواقيعها» مجاني؟
نعم — نص درس «أساسيات الدوال وتواقيعها» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.
ماذا ستتعلم في «أساسيات الدوال وتواقيعها»؟
المعاملات وأنواع الإرجاع وقواعد استدعاء الدوال تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟
لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «أساسيات الدوال وتواقيعها»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟
نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أساسيات الدوال وتواقيعها
- قيم الإرجاع المتعددة
- الدوال متغيرة المعاملات
- defer والدوال المجهولة وعمليات الإغلاق