تعلم البرمجة بلغة بايثون #18"

الإرجاع (Return)

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

n = int(4.2)

الدالة int تقوم بتحويل العدد العشري 4.2 إلى عدد صحيح هو 4 ثم تقوم بإرجاع هذا العدد الصحيح ونقوم بتخزين هذا العدد الصحيح الذي تم إرجاعه في المتغير n.

هناك دوال لا ترجع شيئاً مثل دالة print. يعني مثلاً إذا كتبنا:

d = print('Hello')

سيتم تنفيذ دالة print وطباعة “Hello” لكن بما أن هذه الدالة لا ترجع شيئاً سيتم وضع None في المتغير d. و None هي كلمة من الكلمات المحجوزة في بايثون والتي تعني “لا شيء”.

الآن كيف نجعل الدوال التي نكتبها تقوم بإرجاع قيم؟ يمكننا ذلك باستخدام كلمة return.

لنقم بكتابة مثال مشابه للمثال الذي رأيناه في الدرس السابق وسنستخدم فيه كلمة return:

def greet(lang):
  if lang == 'arabic':
    return 'مرحباً'
  elif lang == 'english':
    return 'Hello'
  else:
    return '👋🏼'

print(greet('english') + ' John')
print(greet('arabic') + ' أحمد')
print(greet('spanish') + ' Maya')

في هذا المثال: في دالة greet سننظر إذا كانت قيمة الوسيط lang هي “arabic”، إذا كانت “arabic” نقوم بإرجاع السلسلة النصية "مرحباً"، وإذا لم تكن “arabic” ننظر هل هي “english”؟ إذا كانت “english” نرجع كلمة "Hello"، أما إذا كانت قيمة الوسيط ليست “arabic” وليست “english” نقوم بإرجاع إشارة الترحيب 👋🏼.

كلمة return تقوم بفعل أمرين:

  1. تقوم بإيقاف تنفيذ الدالة
  2. تقوم بإرسال القيمة المعطاة لها

يعني في مثالنا: إذا كانت قيمة الوسيط “arabic” سيتم إرجاع كلمة "مرحباً" وسيتم إيقاف تنفيذ الدالة مما يعني أن جملة elif لن يتم النظر إليها وسيتم تجاهلها وما بعدها تماماً.

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

print(greet('english') + ' John')

عندنا شخص إنكليزي اسمه John ونريد أن نطبع رسالة ترحيب له. بما أنه إنكليزي سنستدعي الدالة greet مع تمرير “english” لها ليتم طباعة الترحيب بالإنكليزية. بناء على الطريقة التي كتبنا فيها الدالة سترجع لنا الدالة سلسلة نصية هي "Hello". ستأخذ بايثون هذه السلسلة النصية التي تم إرجاعها وتصلها بسلسلة "John "، وسيتم طباعة "Hello John".

يعني لفهم كيفية تنفيذ هذا السطر: يمكن أن نستبدل استدعاء الدالة هذا:

greet('english')

بالقيمة التي ترجعها الدالة فالسطر سيتحول من:

print(greet('english') + ' John')

إلى:

print('Hello' + ' John')

وهذه جملة طباعة مثل الجمل التي رأيناها سابقاً.

في السطر قبل الأخير:

print(greet('arabic') + ' أحمد')

عندنا شخص عربي اسمه أحمد ونريد أن نطبع رسالة ترحيب له. بما أنه عربي سنستدعي الدالة greet مع تمرير “arabic” لها ليتم طباعة الترحيب بالعربية هذه المرة. وسترجع لنا الدالة سلسلة نصية هي "مرحباً". ستأخذ بايثون هذه السلسلة النصية التي تم إرجاعها وتصلها بسلسلة "أحمد "، وسيتم طباعة "مرحباً أحمد". والسطر الأخير سيتم تنفيذه بشكل مشابه وسيتم طباعة "Maya 👋🏼".

تمرين

هذا الكود:

x = 5
print("Hello")

def print_xyz():
  print("This is the first line.")
  print("This is the second line.")  

print("123")
x = x + 2
print(x)

إذا قمنا بتنفيذه فماذا سيكون الناتج؟ ماذا سيطبع هذا الكود على الشاشة؟

سيطبع هذه السطور:

Hello
123
7

لماذا لم يطبع أيضاً هذه السطور؟

This is the first line.
This is the second line.

لأننا لم نقم باستدعاء دالة print_xyz. قلنا أن إنشاء الدالة لا يعني تنفيذها. لتنفيذ الدالة لا بد من استدعائها. يعني في هذا المثال يجب أن نضيف التعليمة التالية ليتم استدعاء الدالة وتنفيذ محتوياتها:

print_xyz()

فيديو الدرس