الدرس التاسع 9: الفنكشن function تعريفه وانواعه
function
الفنكشنن function او الوظيفه :
يستخدم لتجزئه اعمال البرنامج , فمثلا يمكن كتابه function يجد اكبر قيمه و اخر يجد اصغرها وواحد يعين للمتغيرات قيم وهاكذا
والفائده منه هي كتابه كل جزء من برنامجك على حده بشكل مستقل وبالنهايه الربط بهم داخل داله ال main
ان داله ال main هي اساساً عباره عن function فنكشن الا انها تعتبر ال function الرئيسيه في البرنامج كلماتها محجوزه في لغة c++ , وانها هي الوحيده التي تنفذ في البرنامج لذلك نقوم بعمل استدعاء لل function الاخر داخلها ليقوم بعمله .
الفنكشن function يكتب على شكلين :
- الاول اذا كان اسفل داله ال main
- الثاني اذا كان اعلى داله ال main
لكتابه الفنكشن نحتاج الى ثلاث خطوات او نقاط رئيسيه وهي :
- التعريف بالفنكشن قبل داله ال main اذا اردنا ان نكتب الفنكشن تحت ال main
- استدعاء الفنكشن Function Call داخل ال main ليقوم بعمله في موقع استدعاءه
- كتابه الفنكشن function سواء كان فوق او تحت داله ال main (اي الشكل العام )
1- التعريف لافنكشن :
وهنا نستخدمه فقط اذا كنا سنكتب الفنكشن اسفل ال main كي لا يعطي خطا على استدعاء الفنكشن غير ذلك لاحاجه له
الشكل العام له : ; (القيم التي سوف يتلقاها الفنكشن مع نوعها ) اسم الفنكشن نوع القيمه الراجعه
مثال على ذلك :
void fun(int x); أو int fun (int x);
- حيث ان القيمه الراجعه تمثل ما اذا كان هاذا الفنكشن يعود بقيمه او لا , وهنا يجب ان ننوه انه من هاذه الناحيه لدينا نوعين من الفنكشن وهو ما لايعود بقيمه ونوعه void او ان يعود بقيمه من القيم المتعارف عليها int, double ,string ,char ...الخ
- ثم ياتي اسم الفنكشن ويتم تسميته كما هي قوانين تسمية المتغيرات في الدرس الثاني
- ثم القوسين ويوضع داخلهما القيمه او المتغير المبعوث من داله ال main لهاذا الفنكشن مع نوع هادا المتغير او القيمه وربما لانبعث شيئ فتبقى الاقواس فارغه ويسمى هاذا بال بارميتر Parameter
ويمكن بعث قيمتين مختلفتين حيث نفصل بفاصله بينهم مثل : (int x ,char a)
لاننسى الفاصله المنقوطه لانها جمله تعريف تعتبر
- حيث ان القيمه الراجعه تمثل ما اذا كان هاذا الفنكشن يعود بقيمه او لا , وهنا يجب ان ننوه انه من هاذه الناحيه لدينا نوعين من الفنكشن وهو ما لايعود بقيمه ونوعه void او ان يعود بقيمه من القيم المتعارف عليها int, double ,string ,char ...الخ
- ثم ياتي اسم الفنكشن ويتم تسميته كما هي قوانين تسمية المتغيرات في الدرس الثاني
- ثم القوسين ويوضع داخلهما القيمه او المتغير المبعوث من داله ال main لهاذا الفنكشن مع نوع هادا المتغير او القيمه وربما لانبعث شيئ فتبقى الاقواس فارغه ويسمى هاذا بال بارميتر Parameter
2- استدعاء الفنكشن :
كما ذكرنا سابقا ان البرنامج ينفذ فقط ال main فلابد من شيء يربط الفنكشنات الاخرى بال main لكي يتم تنفيذها , لذلك فإننا نستخدم مايسمى ب استدعاء الفنكشن Function Call
ويكتب بالصوره التاليه :: (المتغيرات المبعوثه للفنكشن ) اسم الفنكشن
مثال :: fun(x); او fun(x,y,z);
كما نلاحط اسم الفنكشن ثم قوسين البراميترParameter واذا كان اكثر من متغير نفصلهم بفاصله ,, من هنا يربط الاستدعاء ب براميترParameter التعريف لدى الفنكسن
2- كتابه الفنكشن (الشكل العام ):
عادي جدا , كما تكتب داله ال main
زد على تعريف الفنكشن (1) الاقواس التي سوف تكتب عمل الفنكشن داخلها مثلا
void fun(int x){
هنا عمل الفنكشن بين القوسين
}
لكن اذا كانت الفنكشن تعود بقيمه فيجب كتابه جمله return في النهايه حيث ان هاذه هي التي سوف تعيد القيمه مثلا ::
int fun(int x){
x=50; هنا تخزين رقم 50 الى اكس ليتم اعادته
return x; هنا سيعيد قيمه اكس في موقع استدعاء الفنكشن داخل ال مين
}
ملاحظات :
- الافتراضي للفنكشن انها تاخذ نسخه عن قيمه المتغير المبعوث لها , وللتعامل مع المتغر مباشره نستخدم الاشاره & قبل اسم المتغير في البراميتر
- اشاره & هي اشاره العنوان Address هي اشاره للتعامل مع الموقع مباشره ولس مع القيمه اي انه سوف تحدث فرق للفنكشن اذا استقبلت موقع المتغير ام قيمته
- ونستخدم اشاره ال Address اذا اردنا تعبئه متغيرات ف بهاذه الحاله نحتاج التعامل مع موقع المتغير مباشره
- اما مثلا لو فنكشن يطبع قيمه المتغير فنحن لسنا بحاجه الى استخدام Address لان الفنكشن سوف ياخذ نسخه عن هاذا المتغير ويطبعه ( اي لانحتاج التعديل عليه )
فنكشن يعود بقيمه :
#include <iostream>
#include <string>
using namespace std ;
int fun (int x,int y ){
int a=x*y;
return a;
}
void main (){
int x=5 ,y=2;
int p=fun(x,y);
cout<<p <<endl;
system("pause");
}
فنكشن لايعود بقيمه :يعدل على نسخه من المتغيرين ويطبعهم
#include <iostream>
#include <string>
using namespace std ;
void fun (int x,int y ){
x=0;y=0;
cout<<x<<endl<<y <<endl;
}
void main (){
int x=50 ,y=40;
fun(x,y);
cout<<x<<endl<<y <<endl;
system("pause");
}
فنكشن لايعود بقيمه ::
يعدل على قيمه الموقع مباشره باستخدام العنوان &
#include <iostream>
#include <string>
using namespace std ;
void fun (int &x,int &y ){
x=0;y=0;
cout<<x<<endl<<y <<endl;
}
void main (){
int x=50 ,y=40;
fun(x,y);
cout<<x<<endl<<y <<endl;
system("pause");
}
فنكشن فوق ال main
#include <iostream>
#include <string>
using namespace std ;
void fun (int a ){
cout<<a<<endl;
}
void main (){
int x=50 ;
fun(x);
system("pause");
}
فنكشن من النوع تخت ال main
#include <iostream>
#include <string>
using namespace std ;
void fun (int x );
void main (){
int x=50 ;
fun(x);
system("pause");
}
void fun (int x ){
cout<<x<<endl;
}
Thanks for sharing. It is very useful article;please visit us at our website :
ReplyDeletehttp://www.univ-mosta.dz/flaa/