اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

المقصود أنّ الدالة تُغيّر أو تتفاعل مع أشياء خارج نطاقها المحلي، أي عند القيام بما يلي:

  • تعديل متغير عام
  • تغيير قيمة مُدخلات الدالة نفسها
  • الاتصال بقاعدة بيانات أو ملف.
  • طباعة شيء في الكونسول.
  • أي تفاعل خارج الكود بمعنى الإتصال بـ API خارجي مثلاً

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

counter = 0  

def increment():
    global counter
    counter += 1 
    return counter

لاحظ الدالة increment() تغيّر المتغير العام counter، مما يجعلها غير قابلة للتنبؤ لو استُخدمت في أماكن أخرى في حال وجود متغير باسم counter.

الممارسات الجيدة تقتضي عزل الأجزاء التي تحتوي على Side Effects بوضعها في دوال منفصلة وتقليل الاعتماد على الحالة الخارجية قدر الإمكان، وبالتطبيق على الدالة السابقة سنكتبها كالتالي بتمرير معامل لها فقط ولا تقوم بتعديل أي شيء خارجها:

def increment(current_counter):  
    return current_counter + 1

counter = 0
counter = increment(counter)  
print(counter)  

counter = increment(counter)
print(counter)  

أو من خلال دالة مغلقة Closure:

def create_counter():
    counter = 0 
    
    def increment(): 
        nonlocal counter
        counter += 1
        return counter

    return increment  

  
increment = create_counter()  
print(increment())  
print(increment())  

أما الدالة النقية Pure  فهي تعتمد على مدخلاتها فقط ولا تغير أي شيء خارجي:

def add_numbers(a, b):
    return a + b   
  
result = add_numbers(5, 3)
print(result)  

 

  • 0
نشر

وعليكم السلام ورحمة الله وبركاته.

لنشرح أولا معني الدالة النقية (Pure Function) وهي الدالة التي تأخذ معاملات وتقوم بإعادة ناتج فقط ولا تقوم بالتأثير على أي كود أو متغيرات خارجها ولا تتأثر بأى شئ خارجها.

إذا ما هو التأثير الجانبي (Side Effect)  هو أى شئ يحدث خارج نطاق الدالة مثل :

  • تغيير قيمة متغير خارج الدالة.
  • طباعة شئ ما .
  • كتابة أو قراءة ملف.
  • إرسال بيانات للخادم .
  • تغيير حالة (State) الكود لديك.

لنأخذ مثال على دالة نقية :

def add(x, y):
    return x + y

هنا الدالة السابقة نقية حيث تأخد x و y وتعيد مجموعهم. ولا تقوم بتغير أى شئ في الكود وكل مرة تقوم بإستدعاءها بنفس المدخلات ستعيد لك نفس الناتج.

مثال على دالة ذات تأثير جانبي (Side Effect)  :

result = 0

def add_and_save(x, y):
    global result
    result = x + y

هي دالة غير نقية (non-pure ) حيث لها تأثير جانبي وهو تغير قيمة متغير خارجي اسمه result.

  • 0
نشر

مفهوم التأثيرات الجانبية (Side Effects) في البرمجة يعني أي تغيير يحدث خارج نطاق الدالة نفسها أثناء تنفيذها، مثل تعديل متغير عالمي، تغيير حالة كائن، كتابة/قراءة من ملف، أو حتى طباعة شيء على الشاشة، دالة نظيفة (Pure Function) هي دالة:

function add(a, b) {
  return a + b;
}

والدالة الغير نظيفة 

let total = 0;

function addToTotal(a) {
  total += a; // تعديل متغير عالمي (تأثير جانبي)
  return total;
}

الدوال النظيفة مهمة من حيث سهولة الاختبار بما إنها دايمًا تعطي نفس النتيجة لنفس المدخلات، سهل تختبرها و تعمل على تقليل الأخطاء: لأنها ما بتغير حالة البرنامج بشكل غير متوقع.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...