الأساسيات

الدوال func

  • اعلان الدوال

الصيغة العامة لاعلان الدوال بلغة غو البرمجية

func functionname(parametername type) returntype {
//function body
}

حيث ان الكلمة المفتاحية func ومن ثم اسم الدالة وثم بين القوسين نضع الباراميترز parameters وثم نضع نوع البيانات التي تنتجها الدالة “return data type”

ملاحظة : الباراميترز و نوع بيانات الدالة هما اختيارايان, ويمكن التغاضي عنهما حسب الحاجة وآلية عمل الدالة .

func functionname() {
}

مثال, في الآتي مثال بسيط على دالة تقوم بحساب مساحة مستطيل معلوم طوله وعرضه ..

func rectangle_area (width int, height int) int {

var area = width * height
return area
}

بالنسبة للباراميترز, اذا كان لدينا عدة باراميترز متتالية تملك نفس نوع البيانات (كما في المثال السابق), فيمكننا ان نختصر كتابة نوع بيانات كل باراميتر على حدى كما في المثال التالي ..

func rectangle_area (width, height int) int {

var area = width * height
return area
}

شكل البرنامج النهائي

package main

import (
"fmt"
)

func rectangle_area(width, height int) int {

var area = width * height
return area
}

func main() {
var w, h = 10, 10
fmt.Println("Rectangle Area is: ", rectangle_area(w, h))
}
  • إرجاع عدة قيم Multiple return values

على عكس بعض لغات البرمجة الشهيرة, في لغة غو يمكنك -عبر الدوال- إرجاع عدة قيم

ملاحظة: عند إرجاع عدة قيم في الدالة, لاتنسى أن تحدد نوع بيانات القيم التي يتم ارجاعها.

مثال.. سنعدل على مثال دالة حساب مساحة المستطيل, حيث الان الدالة ستعيد لنا “مساحة المستطيل” و “محيط المستطيل”

package main

import (
"fmt"
)

func rectangle_area_peri(width, height float64) (float64, float64) {

var area = width * height
var peri = (width + height) * 2

return area, peri
}

func main() {
var r_area, r_peri = rectangle_area_peri(10, 10)
fmt.Printf("Area is %f and Perimeter is %f", r_area, r_peri)
}
  • إرجاع القيم بجملة اعلان الدالة Named Return Values

    في الدوال بلغة غو, بدلاً من كتابة تصريح إرجاع القيم داخل نص الدالة function body, يمكنك إرجاعها في نص اعلان الدالة ذاته

مثال

package main

import (
"fmt"
)

func rectangle_area_peri(width, height float64) (area float64, peri float64) {

area = width * height
peri = (width + height) * 2
return
}

func main() {
var r_area, r_peri = rectangle_area_peri(10, 10)
fmt.Printf("Area is %f and Perimeter is %f", r_area, r_peri)
}

نلاحظ أنه في دالة rectangle_area_peri, حذفنا الكلمة المفتاحية var من اعلان المتغيرين area وperi .. وسبب ذلك أننا قد أعلنّاهما/عرفناهما سابقاً في جملة اعلان الدالة ذاتها
في موضع تعريف نوع بيانات القيم المرجعة, حيث سابقاً كانتا (float64, float64) أما في المثال أعلاه أصبحتا (area float64, peri float64)
وبذلك نكون قد حددنا أننا نريد ارجاع قيم تلك المتغيرات على انها القيم التي ترجعها الدالة return values

وهذه الميزة ليس لها إلا هدف “تنسيقي” و “تجميلي” للدالة لا أكثر, فهي لا تؤثر على طريقة عمل الدالة ذاتها .

  • المعرّف الفارغ Blank Identifier

وهو عبارة عن _ (Underscore) , ويمكن أن يحل محل أي قيمة ذات أي نوع بيانات كان
ونستخدمه عندما يكون لدينا دالة ترجع أكثر من قيمة ولكننا نريد إهمال إحدى هذه القيم

فمثلاً في مثال الدالة السابقة, نرى أنها ترجع لنا قيمتان, إحداهما تمثل “مساحة المستطيل” والاخرى “محيط المستطيل”
لكن ماذا لو أننا نريد فقط أن نعرف “مساحة الدائرة” ؟ … عندها نستخدم “المعرّف الفارغ” ليكون بمكان “محيط المستطيل”

مثال

package main

import (
"fmt"
)

func rectangle_area_peri(width, height float64) (area float64, peri float64) {

area = width * height
peri = (width + height) * 2
return
}

func main() {
var r_area, _ = rectangle_area_peri(10, 10)
fmt.Println("Area is: ", r_area)
}
ملاحظة: يمكنك تشغيل أكواد وأمثلة لغة غو من خلال GoLang Playground أو GoPlay.Space .

نبذة عن الكاتب

Firas M. Darwish

Software Engineer, PHP/Laravel, C#, GoLang, founder of ArGoLang.com & others ..

شاركنا رأيك :)