بسم الله الرحمن الرحيم
و الصلاة و السلام على أشرف المرسلين،سيدنا و حبيبنا محمد عليه أفضل الصلاة و أزكى التسليم
أما بعد...
الدوال،الوظائف،Functions،هي في مجملها تؤدي في معناها نفس الغرض أﻻ و هو جعل الكود أكثر قوة و أكثر سهولة للفهم.
ما هي الدوال؟الدوال هي أجزاء من الكود تتكرر كثيرا مثلا،لو أردنا حساب علاقة معينة تتكرر كثيرا في البرنامج،فسيكفينا أن نقوم بإنشاء دالة ثم نستدعي الدالو عندما نحتاجها.
الدوال في بايثون تبدأ بالكلمة المفتاحية def و التي تعني أن الجزء التالي هو عبارة عن نص الدالة،متبوعة بقوسين بينهما برمترات الدالة أو بمعنى أصح Arguments و هي المتغيرات التي تتعامل معها الدالة، متبوعة بنقطتين إشارة إلى بدء نص الدالة.
عند نهاية الكود و نود طباعة نتيجة فعليك أن تستخدم عبارة return و ليس print و هذا الأمر سنفصل فيه ﻻحقا بإذن الله
مثلا لو أردنا كتابة دالة تقوم بحساب العاملي(عملية رياضياتية) بمعني نقوم بحساب
n*n-1*n-2*n-3.....*3*2*1 سنقوم بذلك بطريقتين:الطريقة الأولى هي طريقة الدوران(loop) و الطريقة الثانية هي طريقة الدوال(recursion)
الطريقة الأولى:طريقة الدوران
و الصلاة و السلام على أشرف المرسلين،سيدنا و حبيبنا محمد عليه أفضل الصلاة و أزكى التسليم
أما بعد...
الدوال،الوظائف،Functions،هي في مجملها تؤدي في معناها نفس الغرض أﻻ و هو جعل الكود أكثر قوة و أكثر سهولة للفهم.
ما هي الدوال؟الدوال هي أجزاء من الكود تتكرر كثيرا مثلا،لو أردنا حساب علاقة معينة تتكرر كثيرا في البرنامج،فسيكفينا أن نقوم بإنشاء دالة ثم نستدعي الدالو عندما نحتاجها.
الدوال في بايثون تبدأ بالكلمة المفتاحية def و التي تعني أن الجزء التالي هو عبارة عن نص الدالة،متبوعة بقوسين بينهما برمترات الدالة أو بمعنى أصح Arguments و هي المتغيرات التي تتعامل معها الدالة، متبوعة بنقطتين إشارة إلى بدء نص الدالة.
عند نهاية الكود و نود طباعة نتيجة فعليك أن تستخدم عبارة return و ليس print و هذا الأمر سنفصل فيه ﻻحقا بإذن الله
مثلا لو أردنا كتابة دالة تقوم بحساب العاملي(عملية رياضياتية) بمعني نقوم بحساب
n*n-1*n-2*n-3.....*3*2*1 سنقوم بذلك بطريقتين:الطريقة الأولى هي طريقة الدوران(loop) و الطريقة الثانية هي طريقة الدوال(recursion)
الطريقة الأولى:طريقة الدوران
لنشرح الكودsumm = 1n = int(raw_input('Enter a number'))while n!= 1:summ *=nn -= 1print summ
السطرالأول عبارة عن النتيجة التي نرغب في الحصول عليها عند إنتهاء العملية،تلاحظون أني لم أعطها القيمة صفر(0) و ذلك ﻷننا لو قمنا بذلك لحصلنا في جميع النتائج على صفر(0)-عملية الضرب-
السطر الثاني نطلب من المستخدم إدخال رقم صحيح و نضع القيمة في متغير n.
السطر الثالث نبدأ عملية دوران بشرط أن n ﻻ يساوي الواحد
السطر الرابع و الخامس نقوم بضرب المجموع الذي يمتلك القيمة واحد في المتغير n و ننقص من n واحد
و هكذا حتى تصل قيمة n إلى واحد و هنا تنتهي عملية الدوران و نطبع المجموع summ.
الطريقة الثانية:
def fact(n): if n==1: return 1 else: return n*fact(n-1)
السطر الأول مثله مثل الطريقة الأولى
في السطر الثاني قمنا بتعريف الدالة fact و التي تتعامل مع متغير n
السطر الثالث وضعنا شرط يتمثل في:إذا كان n يساوي الواحد،أعطني القيمة 1
و إﻻ قم بالرجوع إلى نفس الدالة و لكن بقيمة مختلفة هي n-1 مضروبة في n
إن استخدما الطريقة الثانية في حل مشكلة ما فإنه يكفينا أن نستدعي الدالة fact كلما احتجنا الى حساب العاملي فقط يكفي أن نمرر لها القيم،أما لو استخدمنا الطريقة الأولى فإنه علينا كتابة نفس الكود كلما احتجنا إلى ذلك مع متغيرات جديدة.
اتمنى أن تكونوا قد استوعبتم الفكرة،إن كان هنالك أي نقطة غامضة في الموضوع أرجو ابلاغي بذلك
دمتم في رعاية الله و حفظه
بارك الله فيك اخي
ردحذفمع اني لم ارى اللغة ابداااو لم اقرا عليها فقط قرات الكود و فهمت من عندك
لدي استفسار وهو :
عندما تكتب
تعريف للدالة اولا fac
و بعد ذلك تدخلها في الحساب
return n*fac(n-1) z هل فهمت مقصودي
لقد اضفت z فقط لكي يكون القوس صحيح
نعم هذا صحيح أخي أحمد
ردحذف