English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
عادة ما تكون الدالة جزءًا من البرنامج أو قالب التعليمات، مما يتيح للمستخدمين استخدام نفس الكود مرة أخرى، مما يؤدي في النهاية إلى توفير الذاكرة والوقت، وهو أمر مهم أيضًا، لتوفير قراءة أفضل للكود. لذلك، تكون الدالة مجموعة من التعليمات التي تنفذ مهمة معينة وتعيد النتيجة إلى الطرف المطلوب. يمكن أن تقوم الدالة أيضًا بتنفيذ مهمة معينة دون إعادة أي شيء.
بيان الدالة هو طريقة لإنشاء بناء الدالة.
النحو:
func اسم_الدالة(قائمة_المعامل)(نوع_return_type){ // جسم_الدالة..... }
بيان الدالة يحتوي على:
func:إنه كلمة مفتاحية في لغة Go تستخدم لإنشاء الدوال.
اسم_الدالة:إنهالدالةالاسم.
قائمة_المعامل:يحتوي على اسم ونوع معامل الدالة.
نوع_return_type:هذا الاختياري يحتوي على نوع القيمة التي تعودها الوظيفة. إذا تم استخدام return_type في الدالة، فإنه يجب استخدام جملة return في الدالة.
يتم إكمال استدعاء الوظيفة عند رغبة المستخدم في تنفيذ وظيفة. يجب استدعاء الوظيفة لاستخدام وظيفتها. مثل المثال التالي، لدينا وظيفة تُدعى add() ولديها معادمتان. الآن نستدعى هذه الوظيفة في الدالة الرئيسية باستخدام اسمها، أي area(12،10) مع وجود معادمتين.
package main import "fmt" //استخدام area() للبحث عن مساحة المربع //معادمتين للوظيفة، وهي الطول والعرض func area(length, width int) int { Ar := length * width return Ar } func main() { //عرض مساحة المربع //باستدعاء الطريقة fmt.Printf("مساحة المربع: %d", area(12, 10)) }
الإخراج:
مساحة المربع: 120
في لغة Go، تُدعى المعادمات التي يتم نقلها إلى الوظائف المعادمات الفعلية (المعادمات الفعلية)، وتُدعى المعادمات التي تتلقاها الوظيفة المعادمات الشكلية (المعادمات الشكلية).
ملاحظة:بافتراض، يستخدم لغة Go طريقة الاستدعاء بالقيم في نقل المعادمات إلى الوظائف.
يستخدم لغة Go طريقتين لتحويل المعادمات إلى الوظائف:
الاستدعاء بالقيمفي هذه طريقة نقل المعادمات، القيم الفعلية للمعادمات يتم نسخها إلى معادمات الشكل في الوظيفة، وتباعداً يتم تخزين كلا النوعين من المعادمات في مواقع تخزين مختلفة. لذلك، أي تغيير يتم إجراؤه داخل الوظيفة لن يعكسه المعاد استدعاؤه في المعادمات الفعلية.
package main import "fmt" //وظيفة تبادل القيم func swap(a, b int) int { var o int o = a a = b b = o return o } func main() { var p int = 10 var q int = 20 fmt.Printf("p = %d و q = %d", p, q) //استدعاء بالقيم swap(p, q) fmt.Printf("\np = %d و q = %d", p, q) }
الإخراج:
p = 10 و q = 20 p = 10 و q = 20
باستدعاء بالمراجع:المواضيع الفعلية والشكلية تشير إلى نفس الموقع، لذلك أي تغيير يتم إجراؤه داخل الوظيفة في الواقع يعكسه المعاد استدعاؤه في المعادمات الفعلية.
package main import "fmt" //وظيفة تبادل القيم func swap(a, b *int) int { var o int o = *a *a = *b *b = o return o } func main() { var p int = 10 var q int = 20 fmt.Printf("p = %d و q = %d", p, q) //الاستدعاء بالمراجع swap(&p, &q) fmt.Printf("\np = %d و q = %d", p, q) }
الإخراج:
p = 10 و q = 20 p = 20 و q = 10