تعلم البرمجة بلغة بايثون #16: الدوال في بايثون"

في هذا الدرس سنتحدث عن الدوال في بايثون.

تكلمنا سابقاً بشكل سريع عن الدوال في بايثون عندما ذكرنا أنماط سير البرامج في بايثون وقلنا أن هناك النمط التسلسلي والنمط الشرطي والنمط التكراري والنمط الوظيفي. الدوال هي أساس النمط الوظيفي، وسنتعرف عليها في هذا الدرس.

لنفهم أهمية الدوال دعونا نتخيل الوضع التالي: لنفترض أن هناك خمسة أسطر من الكود تؤدي وظيفة معينة وأنك تستخدم هذه المجموعة من الأسطر عدة مرات في برنامجك. الآن ماذا لو وجدت خطأ في مجموعة الأسطر هذه؟ ماذا لو كنت استخدمت هذه المجموعة في 100 مكان مختلف في برنامجك؟ ستضطر في هذه الحالة إلى أن تقوم بإصلاح هذه الأسطر في كل مكان قمت باستخدامها فيه.

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

الكود التالي يستخدم لإنشاء دالة اسمها func تقوم بتنفيذ ثلاث أوامر طباعة:

def func():
  print("This is a function.")
  print("هذه دالة.")  
  print("ABC")

السطر الأول يبدأ بكلمة def وهي اختصار لكلمة define وتعني بالعربية “عرّف”، يعني في السطر الأول نقول: عرف أو أنشئ دالة جديدة اسمها func، وبعد اسم الدالة نرى قوسين.. يمكن إعطاء قيم بين هذين القوسين لتستخدمها الدالة. سنعرف المزيد عن ذلك بعد قليل. وبعد القوسين نرى نقطتين رأسيتان. في الأسطر الثلاثة التالية نرى ثلاث تعليمات طباعة منزاحة إلى اليمين، وهذا الانزياح يعني أن هذه التعليمات تابعة لهذه الدالة.

أمر مهم يجب التنبه له وهو أنه عندما نقوم بإنشاء دالة بهذا الشكل في برامجنا فإنه لا يتم تنفيذ محتويات الدالة، هذا يعني أنه عندما ننشئ الدالة func في مثالنا فإن تعليمات الطباعة الثلاثة الموجودة داخل الدالة لن يتم تنفيذها. متى سيتم تنفيذها إذن؟ سيتم تنفيذها عندما يتم استدعاء الدالة. المثال التالي يعرض كيف يمكن استدعاء الدوال في بايثون:

def func():
  print("This is a function.")
  print("هذه دالة.")  
  print("ABC")
  
func()
print("Hello")
func()

في هذا المثال قمنا بتعريف دالة اسمها func كما في المثال السابق ثم قمنا باستدعاء الدالة عن طريق كتابة اسمها متبوعاً بقوسين. عندما يتم استدعاء الدالة تقوم بايثون بتنفيذ محتويات الدالة ثم إكمال تنفيذ البرنامج. في مثالنا هذا ستقوم بايثون بتنفيذ محتويات func وهي ثلاث تعليمات طباعة ستطبع المخرَجات التالية:

This is a function.
هذه دالة. 
ABC

ثم تنتقل بايثون إلى السطر التالي في البرنامج وهو:

print("Hello")

وستقوم بايثون بتنفيذه وطباعة “Hello” على الشاشة. ثم في السطر الأخير من البرنامج يتم استدعاء دالة func مرة ثانية. وكما حدث في الاستدعاء الأول بالضبط: سيتم تنفيذ محتويات func وطباعة الجمل الثلاث. إذن بعد انتهاء تنفيذ البرنامج سيكون لدينا المخرجات التالية:

This is a function.
هذه دالة. 
ABC
Hello
This is a function.
هذه دالة. 
ABC

لاحظ أننا قمنا باستخدام الدوال في أمثلة كثيرة في الدروس السابقة، فمثلاً دالة print والتي استخدمناها كثيراً هي دالة تقوم بطباعة القيمة أو القيم المعطاة إليها على الشاشة. أيضاً تعرفنا على دالة int التي تقوم بتحويل القيمة المعطاة إليها إلى عدد صحيح. وأيضاً رأينا دالة input والتي تقرأ إدخالات من مستخدم برامجنا. ورأينا دوال أخرى أيضاً.

بالنسبة لتسمية الدوال: يجب اتباع نفس القواعد التي يجب اتباعها عند تسمية المتغيرات، وقد تعرفنا على هذه القواعد في درس سابق.

فيديو الدرس