عرض مشاركة واحدة
قديم 02-06-2012, 05:00 PM   المشاركة رقم: 30
الكاتب
مازن المشهداني
عضو فعال
الصورة الرمزية مازن المشهداني

البيانات
تاريخ التسجيل: Apr 2011
رقم العضوية: 3568
المشاركات: 641
بمعدل : 0.13 يوميا

الإتصالات
الحالة:
مازن المشهداني غير متواجد حالياً
وسائل الإتصال:

كاتب الموضوع : مازن المشهداني المنتدى : منتدى تعليم الفوركس
افتراضي الدرس السادس .. الدوال

بسم الله الرحمن الرحيم

مرحبا بكم في الدرس السادس ... عالم الدوال في لغة MQL4

الدوال في اي لغة برمجية هي عصب البرنامج وقارب النجاة لكل مبرمج.

الدوال functions هي عبارة عن جمل statements متجمعة (هناك جمل مستقلة ولا تحتاج للتجمع لتكوين دالة مثل الحلقات والقرارات)

دعونا نبدأ الدرس .

* ماذا نعني بالدوال functions ?

الدالة تشبه في طريقة عملها طريقة عمل مشواة اللحم , فأنت عليك ان تضع اللحم والبهارات وهي عليها ان تخرج لك الكباب المشوي

اللحم والبهارت هما المعرفات والتغيرات واسم الدالة , والكباب هو ناتج الدالة والذي يمثل بقيمة return , اما المشواة ذاتها فهي جسد الدلة .

هناك اختلاف وحيد بين المشواة والدالة وهو ان بعض الدوال لها ناتج خالي (لاشئ) (ويمثلها في لغة MQL4 بالكلمة المحجوزة void)

دعونا نأخذ بعض الأمثلة :

كود PHP:

double

my_func (double a, double b, double c) // المعرفات والمتغيرات ( اللحم والبهارت)
{

return (a*b + c); // ناتج الدالة (الكباب)

}




كما نرى في المثال اعلاه , الدالة بدأت بتحديد نوع الناتج (الكلمة المحجوزة double) , وبعدها اسم الدالة متبوعة بالقوسين ( ) .

بداخل تلك الأقواس ( ) سنضع اللحم والبهارات . اسف اقصد المعرفات ومتغيراتهم نقره لعرض الصورة في صفحة مستقلة

هنا عندنا 3 معرفات double a , double b , double c .

تبدأ الدالة عملها وتنتهي داخل القوسين { }

الكلمة المحجوزة ( return ) هي المسئولة عن اخراج الناتج النهائي للدالة .

* الكلمة المحجوزة ( Return ) :

الكلمة المحجوزة ( return ) كما قلنا هي المسئولة عن انهاء الدالة ( مثل الكلمة المحجوزة Break في الحلقات والقرارات) , كما تعطينا التحكم في نداء الدالة function call (سنعرفها بعد قليل)

الكلمة المحجوزة ( return ) يمكن ان تحتوي على تعبير ما بين اقواسها ( ) كما في مثالنا هنا ( التعبير هو اتحاد العمليات والمعرفات , راجع درس العمليات والتعبيرات ) وهنا وظيفتها ان تنهي الدالة وتخرج لنا نتائج العمليات بداخلها (كما في المثال (a*b + c);

ويمكن ايضا ان لا تحتوي على تعبير ما وهنا تكون وظيفتها فقط انهاء الدالة .

ملاحظة : ليس كل الدوال تنتهي بالكلمة المحجوزة ( return ) خاصة لو لم يكن هناك اي قيمة ناتجة عن عمليات او ما شابه .

مثال عن ذلك :

كود PHP:
void // void mean there’s no sausage – returned value.

my_func (string s) // function name and parameters list (meat & spices)

{

Print(s);

}




تذكروا هنا ان الكلمة المحجوزة void معناها انه لا يوجد هناك نتيجة للمعطيات.

في هذا المثال لم تخرج لنا الدالة قيمة الناتج بل فقط أخرجت لنا المعرف ( s ) كما ادخلناه دون تغيير

متى لم تستخدم الدالة الكلمة المحجوزة ( return ) يجب علينا استخدام الكلمة المحجوزة ( void ) لنحدد طبيعة الدالة .

هذه الأنواع من الدوال تسمى في بعض اللغات البرمجية بالطرق (methods) ولكنها في لغة MQL4 تسمى دوال functions

* استدعاء الدالة function call :

كلنا عرفنا ماهي الدالة functin ( كما اتمنى ) , حسنا كيف نقوم باستدعاء واستخدام الدالة في لغة MQL4 ؟

هناك عدة طرق بعد كتابة الدالة الخاصة بك تمكنك من استخدامها (استدعائها) في برنامجك .

افترض معي انك كتبت دالة تقوم بجمع عددين صحيحين ( integers )

هذه هي الدالة :

كود PHP:
int collect (int first_number, int second_number)

{

return(first_number+ second_number);

}



انت تعرف كيف تعمل هذه الدالة , لكنك تريد استخدامها في البرنامج .

يمكنك استخدامها ( استدعائها ) هكذا :

كود PHP:
int a = 10;

int b = 15;

int sum = collect(a,b);

Print (sum);



في المثال السابق سيخرج البرنامج والكومبيوتر الناتج 25 ( نتيجة جمع العددين 10 , 15 ) داخل الدالة التي كتبتها. !!

هل هذا سحر ام خيال !! كيف قامت السطور السابقة باستخدام ( باستدعاء ) الدالة الخاصة بك ؟؟؟

لا حظ انك سميت الدالة الخاصة بك بالأسم collect , وقيمة الكلمة المحجوزة ( return ) بها عملية الجمع .

السطر الخيالي ( int sum = collect(a,b); ) هو من قام باستخدام الدالة ( استدعائها ) بإضافة القيمة ( collelct ) اسم الدالة الى المتغير ( sum ) وأعطى الدالة القيمتين 10 و 15 .

فعند طباعة المتغير sum ستقوم بأستداء الدالة واخراج نتيجتها .

بمعنى شامل : انك كتبت الدالة وأعطيتها اسما ما , ثم كتبت امر استخدامها بكتابة اسمها داخل الأمر فقط (وتم تعريف اسم الدالة كمتغير ) , انت هكذا اساسا استدعيت الدالة الخاصة بك .

لغة MQL4 حين ترى اسم الدالة الخاصة بك ستقوم بأخذ القيم ( 10 و 15 في المثال ) وتذهب بهم الى الدالة تبعك وتقوم بمعالجتهم حسب قيمة الكلمة المحجوزة ( return ) وتعود بالقيمة الناتجة الى السطور السابقة لتقوم بطبعها او اخراجها في المكان السابق .

هذه العملية تماما كأنك نسخت سطور الدالة داخل كلمة collect في سطور البرنامج في المثال . سهلة العملية , اليس كذلك ؟

* تداخل دالة في دالة أخرى Nesting.

يمكننا ان ندخل دالة ما بداخل دالة جديدة وذلك بمعالجة سطر استدعاء الدالة برمجيا كجملة برمجية statement ( في الحقيقة كلهم يعتبروا سطور برمجية )

لنرى مثالا يوضح ذلك :

كود PHP:
void print_collection (int first_number, int second_number)

{

int sum = collect(first_number, second_number);

Print(sum);

}




في المثال نحن استخدمنا دالة collect ووضعناها داخل دالة جديدة والناتج هو خلاصة الدالتين .

تفصيلا نحن وضعنا الدالة collect داخل جسد الدالة print_collect وطبعنا نتيجتهما , void في المثال معناها انه لا توجد ( return ) , هل لازلت تتذكرها ؟

** دوال لغة MQL4 الأساسية ( ()init() , deinit() , start ):

كل برنامج في لغة MQL4 سواء كان مؤشر , اكسبرت او اسكربت فهو يبدا دائما بالدالة " ()init " اختصار كلمة بدأ (initialize) وهي تعمل بمجرد وضع البرنامج ( اكسبرت او مؤشر او اسكربت) على شارت الميتاتريدر , ووظيفتها بدء عمل المتغيرات الرئيسية بالبرنامج ( سنعرف الكثير عن المتغيرات في الدرس القادم ان شاء الله )

متى انتهى عمل البرنامج بأغلاق الشارت او مسح المؤشر او الكسبرت او اغلاق الميتا تريدر تقوم الدالة " ()deinit " بعملها لأنهاء البرنامج .

الدالة الثالثة " ()start " ( اهم الدوال على الإطلاق ) تعمل بصفة دائمة كلما استقبلت معطيات وقيم جديدة في متغيراتها ( تحرك السعر يعطي قيم جديدة للهاي واللو والكلوز وقيم المؤشرات المختلفة هي قيم تتغير طوال الوقت ) , احب ان اخبرك هنا انك ستقضي 90% من حياتك البرمجية داخل هذه الدالة .

سنعرف الكثير عن هذه الدوال الأساسية في حياتنا العملية عندما نبرمج ونكتب المؤشرات والإكسبرتات الخاصة بنا ان شاء الله .



في الدرس القادم بأذن الله سنتكلم عن المتغيرات في لغة MQL4

اخوتي الكرام لا تنسوا دعمنا باللايكات وتقييم الموضوع



التوقيع

عرض البوم صور مازن المشهداني  
رد مع اقتباس
  #30  
قديم 02-06-2012, 05:00 PM
مازن المشهداني مازن المشهداني غير متواجد حالياً
عضو فعال
افتراضي الدرس السادس .. الدوال

بسم الله الرحمن الرحيم

مرحبا بكم في الدرس السادس ... عالم الدوال في لغة MQL4

الدوال في اي لغة برمجية هي عصب البرنامج وقارب النجاة لكل مبرمج.

الدوال functions هي عبارة عن جمل statements متجمعة (هناك جمل مستقلة ولا تحتاج للتجمع لتكوين دالة مثل الحلقات والقرارات)

دعونا نبدأ الدرس .

* ماذا نعني بالدوال functions ?

الدالة تشبه في طريقة عملها طريقة عمل مشواة اللحم , فأنت عليك ان تضع اللحم والبهارات وهي عليها ان تخرج لك الكباب المشوي

اللحم والبهارت هما المعرفات والتغيرات واسم الدالة , والكباب هو ناتج الدالة والذي يمثل بقيمة return , اما المشواة ذاتها فهي جسد الدلة .

هناك اختلاف وحيد بين المشواة والدالة وهو ان بعض الدوال لها ناتج خالي (لاشئ) (ويمثلها في لغة MQL4 بالكلمة المحجوزة void)

دعونا نأخذ بعض الأمثلة :

كود PHP:
double

my_func (double a, double b, double c) // المعرفات والمتغيرات ( اللحم والبهارت)
{

return (a*b + c); // ناتج الدالة (الكباب)

}




كما نرى في المثال اعلاه , الدالة بدأت بتحديد نوع الناتج (الكلمة المحجوزة double) , وبعدها اسم الدالة متبوعة بالقوسين ( ) .

بداخل تلك الأقواس ( ) سنضع اللحم والبهارات . اسف اقصد المعرفات ومتغيراتهم نقره لعرض الصورة في صفحة مستقلة

هنا عندنا 3 معرفات double a , double b , double c .

تبدأ الدالة عملها وتنتهي داخل القوسين { }

الكلمة المحجوزة ( return ) هي المسئولة عن اخراج الناتج النهائي للدالة .

* الكلمة المحجوزة ( Return ) :

الكلمة المحجوزة ( return ) كما قلنا هي المسئولة عن انهاء الدالة ( مثل الكلمة المحجوزة Break في الحلقات والقرارات) , كما تعطينا التحكم في نداء الدالة function call (سنعرفها بعد قليل)

الكلمة المحجوزة ( return ) يمكن ان تحتوي على تعبير ما بين اقواسها ( ) كما في مثالنا هنا ( التعبير هو اتحاد العمليات والمعرفات , راجع درس العمليات والتعبيرات ) وهنا وظيفتها ان تنهي الدالة وتخرج لنا نتائج العمليات بداخلها (كما في المثال (a*b + c);

ويمكن ايضا ان لا تحتوي على تعبير ما وهنا تكون وظيفتها فقط انهاء الدالة .

ملاحظة : ليس كل الدوال تنتهي بالكلمة المحجوزة ( return ) خاصة لو لم يكن هناك اي قيمة ناتجة عن عمليات او ما شابه .

مثال عن ذلك :

كود PHP:
void // void mean there’s no sausage – returned value.

my_func (string s) // function name and parameters list (meat & spices)

{

Print(s);

}




تذكروا هنا ان الكلمة المحجوزة void معناها انه لا يوجد هناك نتيجة للمعطيات.

في هذا المثال لم تخرج لنا الدالة قيمة الناتج بل فقط أخرجت لنا المعرف ( s ) كما ادخلناه دون تغيير

متى لم تستخدم الدالة الكلمة المحجوزة ( return ) يجب علينا استخدام الكلمة المحجوزة ( void ) لنحدد طبيعة الدالة .

هذه الأنواع من الدوال تسمى في بعض اللغات البرمجية بالطرق (methods) ولكنها في لغة MQL4 تسمى دوال functions

* استدعاء الدالة function call :

كلنا عرفنا ماهي الدالة functin ( كما اتمنى ) , حسنا كيف نقوم باستدعاء واستخدام الدالة في لغة MQL4 ؟

هناك عدة طرق بعد كتابة الدالة الخاصة بك تمكنك من استخدامها (استدعائها) في برنامجك .

افترض معي انك كتبت دالة تقوم بجمع عددين صحيحين ( integers )

هذه هي الدالة :

كود PHP:
int collect (int first_number, int second_number)

{

return(first_number+ second_number);

}



انت تعرف كيف تعمل هذه الدالة , لكنك تريد استخدامها في البرنامج .

يمكنك استخدامها ( استدعائها ) هكذا :

كود PHP:
int a = 10;

int b = 15;

int sum = collect(a,b);

Print (sum);



في المثال السابق سيخرج البرنامج والكومبيوتر الناتج 25 ( نتيجة جمع العددين 10 , 15 ) داخل الدالة التي كتبتها. !!

هل هذا سحر ام خيال !! كيف قامت السطور السابقة باستخدام ( باستدعاء ) الدالة الخاصة بك ؟؟؟

لا حظ انك سميت الدالة الخاصة بك بالأسم collect , وقيمة الكلمة المحجوزة ( return ) بها عملية الجمع .

السطر الخيالي ( int sum = collect(a,b); ) هو من قام باستخدام الدالة ( استدعائها ) بإضافة القيمة ( collelct ) اسم الدالة الى المتغير ( sum ) وأعطى الدالة القيمتين 10 و 15 .

فعند طباعة المتغير sum ستقوم بأستداء الدالة واخراج نتيجتها .

بمعنى شامل : انك كتبت الدالة وأعطيتها اسما ما , ثم كتبت امر استخدامها بكتابة اسمها داخل الأمر فقط (وتم تعريف اسم الدالة كمتغير ) , انت هكذا اساسا استدعيت الدالة الخاصة بك .

لغة MQL4 حين ترى اسم الدالة الخاصة بك ستقوم بأخذ القيم ( 10 و 15 في المثال ) وتذهب بهم الى الدالة تبعك وتقوم بمعالجتهم حسب قيمة الكلمة المحجوزة ( return ) وتعود بالقيمة الناتجة الى السطور السابقة لتقوم بطبعها او اخراجها في المكان السابق .

هذه العملية تماما كأنك نسخت سطور الدالة داخل كلمة collect في سطور البرنامج في المثال . سهلة العملية , اليس كذلك ؟

* تداخل دالة في دالة أخرى Nesting.

يمكننا ان ندخل دالة ما بداخل دالة جديدة وذلك بمعالجة سطر استدعاء الدالة برمجيا كجملة برمجية statement ( في الحقيقة كلهم يعتبروا سطور برمجية )

لنرى مثالا يوضح ذلك :

كود PHP:
void print_collection (int first_number, int second_number)

{

int sum = collect(first_number, second_number);

Print(sum);

}




في المثال نحن استخدمنا دالة collect ووضعناها داخل دالة جديدة والناتج هو خلاصة الدالتين .

تفصيلا نحن وضعنا الدالة collect داخل جسد الدالة print_collect وطبعنا نتيجتهما , void في المثال معناها انه لا توجد ( return ) , هل لازلت تتذكرها ؟

** دوال لغة MQL4 الأساسية ( ()init() , deinit() , start ):

كل برنامج في لغة MQL4 سواء كان مؤشر , اكسبرت او اسكربت فهو يبدا دائما بالدالة " ()init " اختصار كلمة بدأ (initialize) وهي تعمل بمجرد وضع البرنامج ( اكسبرت او مؤشر او اسكربت) على شارت الميتاتريدر , ووظيفتها بدء عمل المتغيرات الرئيسية بالبرنامج ( سنعرف الكثير عن المتغيرات في الدرس القادم ان شاء الله )

متى انتهى عمل البرنامج بأغلاق الشارت او مسح المؤشر او الكسبرت او اغلاق الميتا تريدر تقوم الدالة " ()deinit " بعملها لأنهاء البرنامج .

الدالة الثالثة " ()start " ( اهم الدوال على الإطلاق ) تعمل بصفة دائمة كلما استقبلت معطيات وقيم جديدة في متغيراتها ( تحرك السعر يعطي قيم جديدة للهاي واللو والكلوز وقيم المؤشرات المختلفة هي قيم تتغير طوال الوقت ) , احب ان اخبرك هنا انك ستقضي 90% من حياتك البرمجية داخل هذه الدالة .

سنعرف الكثير عن هذه الدوال الأساسية في حياتنا العملية عندما نبرمج ونكتب المؤشرات والإكسبرتات الخاصة بنا ان شاء الله .



في الدرس القادم بأذن الله سنتكلم عن المتغيرات في لغة MQL4

اخوتي الكرام لا تنسوا دعمنا باللايكات وتقييم الموضوع




رد مع اقتباس