الدوال (Functions) في بايثون

الدرس السادس: الدوال (Functions) وكيفية استخدامها لتنظيم الكود وجعله أكثر قابلية لإعادة الاستخدام.

تعلم بايثون

February 4, 2025

Functions in Python

الدرس السادس: الدوال (Functions) في بايثون

مرحبًا بك في الدرس السادس من سلسلة تعلم لغة بايثون! في هذا الدرس، سنركز على الدوال (Functions) وكيفية استخدامها لتنظيم الكود وجعله أكثر قابلية لإعادة الاستخدام. الدوال هي واحدة من أهم المفاهيم في البرمجة، حيث تُستخدم لتقسيم البرنامج إلى أجزاء صغيرة ومُدارة بسهولة.

 

1. ما هي الدوال؟

الدوال هي كتل من الكود تقوم بمهمة معينة ويمكن استدعاؤها عند الحاجة. باستخدام الدوال، يمكنك:

  • تجنب تكرار الكود.
  • تنظيم الكود بشكل أفضل.
  • جعل البرنامج أكثر قابلية للقراءة والصيانة.
 

أ. تعريف دالة

تُعرف الدالة باستخدام الكلمة المفتاحية def متبوعة باسم الدالة وأقواس تحتوي على المعاملات (إن وجدت).

def greet():
    print("Hello, World!")

ب. استدعاء دالة

بعد تعريف الدالة، يمكنك استدعاؤها باستخدام اسمها متبوعًا بأقواس.

greet()  # النتيجة: Hello, World!

2. الدوال مع المعاملات (Parameters)

المعاملات هي القيم التي تُمرر إلى الدالة عند استدعائها. يمكن أن تكون الدوال بدون معاملات أو تحتوي على واحد أو أكثر.

 

أ. دالة بمعامل واحد

def greet(name):
    print(f"Hello, {name}!")

greet("Ali")  # النتيجة: Hello, Ali!

ب. دالة بمعاملات متعددة

def add(a, b):
    print(a + b)

add(5, 3)  # النتيجة: 8

3. إرجاع القيم من الدوال

بدلاً من طباعة النتائج داخل الدالة، يمكنك إرجاع القيم باستخدام كلمة return. هذه القيم يمكن تخزينها في متغيرات أو استخدامها مباشرة.

def multiply(a, b):
    return a * b

result = multiply(4, 5)
print(result)  # النتيجة: 20

ملاحظة: عندما يتم الوصول إلى كلمة return، تتوقف الدالة عن التنفيذ ولا يتم تنفيذ أي كود بعدها.


4. القيم الافتراضية للمعاملات

يمكنك تحديد قيم افتراضية للمعاملات بحيث إذا لم يتم تمرير قيمة معينة عند استدعاء الدالة، يتم استخدام القيمة الافتراضية.

def greet(name="Guest"):
    print(f"Hello, {name}!")

greet()         # النتيجة: Hello, Guest!
greet("Ali")    # النتيجة: Hello, Ali!

5. الدوال ذات عدد غير محدد من المعاملات

إذا كنت لا تعرف عدد المعاملات التي سيتم تمريرها إلى الدالة، يمكنك استخدام *args لتمرير عدد غير محدد من المعاملات.

 

أ. استخدام *args

def sum_all(*args):
    total = 0
    for num in args:
        total += num
    return total

print(sum_all(1, 2, 3, 4))  # النتيجة: 10

ب. استخدام **kwargs

إذا كنت تريد تمرير عدد غير محدد من المعاملات على شكل أزواج مفتاح-قيمة، يمكنك استخدام **kwargs.

def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_info(name="Ali", age=25, city="Riyadh")
# النتيجة:
# name: Ali
# age: 25
# city: Riyadh

6. الدوال المتداخلة (Nested Functions)

يمكنك تعريف دالة داخل دالة أخرى. هذه الدوال الداخلية يمكن أن تُستخدم فقط داخل الدالة الأم.

def outer_function():
    print("This is the outer function.")

    def inner_function():
        print("This is the inner function.")
    
    inner_function()

outer_function()
# النتيجة:
# This is the outer function.
# This is the inner function.

7. الدوال المجهولة (Lambda Functions)

الدوال المجهولة (أو lambda ) هي دوال صغيرة يمكن كتابتها في سطر واحد. تُستخدم عادةً عندما تحتاج إلى دالة بسيطة للاستخدام المؤقت.

 

أ. صياغة دالة Lambda

square = lambda x: x ** 2
print(square(5))  # النتيجة: 25

ب. استخدام Lambda مع الدوال الأخرى

يمكنك استخدام lambda مع دوال مثل map() وfilter().

# استخدام map() لتطبيق دالة على كل عنصر في القائمة
numbers = [1, 2, 3, 4]
squares = list(map(lambda x: x ** 2, numbers))
print(squares)  # النتيجة: [1, 4, 9, 16]

# استخدام filter() لتصفية العناصر بناءً على شرط
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)  # النتيجة: [2, 4]

8. نطاق المتغيرات (Scope)

نطاق المتغير يحدد مكان استخدامه داخل البرنامج. هناك نوعان رئيسيان من النطاقات:

  • المتغيرات المحلية (Local): متغيرات معرفة داخل دالة ولا يمكن الوصول إليها خارجها.
  • المتغيرات العامة (Global): متغيرات معرفة خارج الدوال ويمكن الوصول إليها من أي مكان.
 

أ. المتغيرات المحلية

def my_function():
    x = 10  # متغير محلي
    print(x)

my_function()  # النتيجة: 10
# print(x)  # خطأ: x غير معرفة هنا

ب. المتغيرات العامة

x = 10  # متغير عام

def my_function():
    print(x)

my_function()  # النتيجة: 10
print(x)       # النتيجة: 10

ملاحظة: إذا أردت تعديل متغير عام داخل دالة، يجب استخدام كلمة global.

x = 10

def modify_global():
    global x
    x = 20

modify_global()
print(x)  # النتيجة: 20

9. تطبيقات عملية

تطبيق 1: حساب المتوسط الحسابي

def calculate_average(numbers):
    if len(numbers) == 0:
        return 0
    return sum(numbers) / len(numbers)

nums = [10, 20, 30, 40, 50]
average = calculate_average(nums)
print(f"The average is: {average}")  # النتيجة: The average is: 30.0

تطبيق 2: التحقق من الأعداد الأولية

def is_prime(n):
    if n <= 1:
        return False
    for i in range(2, int(n ** 0.5) + 1):
        if n % i == 0:
            return False
    return True

print(is_prime(11))  # النتيجة: True
print(is_prime(15))  # النتيجة: False

تطبيق 3: استخدام Lambda مع filter()

numbers = [1, 2, 3, 4, 5, 6]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)  # النتيجة: [2, 4, 6]

10. نصائح حول استخدام الدوال

  1. اجعل الدوال صغيرة ومحددة:
    حاول أن تكون الدالة مسؤولة عن مهمة واحدة فقط. هذا يجعل الكود أكثر قابلية للقراءة والصيانة.

  2. استخدم أسماء واضحة:
    اختر أسماء تصف وظيفة الدالة بوضوح.

  3. تجنب استخدام المتغيرات العامة إلا عند الضرورة:
    حاول الحد من استخدام المتغيرات العامة لأنها قد تؤدي إلى مشاكل في الكود الكبير.

 

الخاتمة

في هذا الدرس، تعلمت كيفية إنشاء الدوال واستخدامها لتنظيم الكود وجعله أكثر قابلية لإعادة الاستخدام. الدوال هي أداة قوية تساعدك على تقسيم البرنامج إلى أجزاء صغيرة ومُدارة بسهولة.

 

في الدرس القادم، سنتحدث عن التعامل مع الأخطاء (Error Handling) وكيفية التعامل مع الاستثناءات في البرامج. استمر في الممارسة ولا تتردد في طرح الأسئلة إذا كنت بحاجة إلى مساعدة!

 

🚀 أنت الآن على الطريق الصحيح لتصبح مبرمجًا محترفًا!

التعليقات

  • Web development tutorial A-0

    تعلم برمجة المواقع الاكترونية A-0

    من الصفر إلى الاحتراف: رحلة تطوير الويب الكاملة

    عرض المقال
  • Differences Between Android and iOS

    الاختلافات بين Android وiOS

    برمجة التطبيقات المتنقلة: الاختلافات بين Android وiOS وأفضل الممارسات

    عرض المقال
  • Game Development with Unity

    تطوير الألعاب باستخدام Unity

    تطوير الألعاب باستخدام Unity: من الفكرة إلى المنتج النهائي

    عرض المقال
  • Mastering Programming with Python

    إتقان البرمجة باستخدام Python

    إتقان البرمجة باستخدام Python: المشاريع العملية والنصائح

    عرض المقال
  • What are the benefits of websites

    ما هي فوائد المواقع الاكترونية

    فوائد المواقع الإلكترونية للشركات

    عرض المقال
  • Web development tutorial A-1

    تعلم برمجة المواقع الاكترونية A-1

    الدرس الأول: تعلم لغة HTML من الصفر - مقدمة شاملة مع إعداد الأدوات

    عرض المقال
  • Web development tutorial A-2

    تعلم برمجة المواقع الاكترونية A-2

    الدرس الثاني: تعلم لغة HTML من الصفر - الوسوم المتقدمة والجداول

    عرض المقال
  • Artificial Intelligence Qwen AI

    الذكاء الاصطناعي Qwen AI

    Qwen AI هو نموذج ذكاء اصطناعي متعدد الوظائف يدعم اللغات ويتولى المهام الإبداعية والتفاعلية

    عرض المقال