![]() |
رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
اقتباس:
مشكور على تقييمك الموضوع واكيد مكانك محجوز |
رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
مشكو اخي الكريم ولله ان كنت مستني موضيع مثل هد من زمان:1 (87):
|
رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
اقتباس:
ولا تنسى اللايك |
الدرس الرابع .. الحلقات والقرارات (جزء 1)
السلام عليكم
نعود معكم اليوم لنتابع باقي الدروس بسم الله الرحمن الرحيم مرحبا بكم في الدرس الرابع ... الحلقات والقرارات (جزء 1) في لغة MQL4 اي برنامج تتم كتابته بلغة MQL4 (مؤشر او اكسبرت او اسكربت) او اي لغة برمجية أخرى يقوم بتنفيذ اوامره وشروطه بطريقة تسلسلية تنازلية ( من القمة الى القاع) . بمعنى أخر ينفذ اوامره جملة statment بعد أخرى (أذكركم هنا ان الجملة statment تتكون من مجموعة تعبيرات expressions التي تتكون بالتالي من اتحاد المعرفات identefires والعمليات operations (راجع الدرس السابق)) يمكن تعريف الجملة statment ايضا بأنها سطر من الأكواد يخبر الكومبيوتر ان ينفذ امرا ما (اظهار اشارة بيع مثلا) مثال : كود PHP: Print("Hello World"); return 0; الفاصلة المنقوطة في نهاية الجملة statment هامة للغاية في قواعد هذه اللغة , ونسيانها مصدر 90% من الأخطاء البرمجية. عملية التحكم في تنفيذ الأوامر تسلسليا من القمة الى القاع ليست هي الحالة الوحيدة بل هناك حالتين أخريين : هما الحلقات Loops والقرارات Decisions. البرامج التي نكتبها مثل قراراتنا البشرية تتغير تبعا لتغير الظروف من حولنا , في حالة البرامج عملية التحكم المتسلسل لتنفيذ الأوامر يمكن ان تقفز من جزء الى جزء أخر داخل البرنامج . الجمل البرمجية statments التي تتحكم بهذه القفزات (تنقلنا من امر الى أخر في البرنامج) تسمى بالجمل المسيطرة control statments . وتتركب من الحلقات loops والقرارات decisions الحلقات Loops ---------------------- الحلقات loops تقوم بتكرار جزء ما من البرنامج لعدد محدد من المرات. وهذا التكرار يستمر طالما الشروط صحيحة true , وستنتهي الحلقة او التكرار مع اول مخالفة للشروط (احد الشروط او كلهم اصبحوا يعطوا نتيجة خاطئة false) متى انتهت الحلقة (التكرار) ستقوم بنقل التحكم في تنفيذ الأوامر الى الجملة التالية لتنفيذ امر أخر في البرنامج او الحلقة .. وهكذا. هناك نوعين من الحلقات في لغة MQL4 : 1- الحلقة ( for ) : الحلقة ( for ) تعتبر اسهل انواع الحلقات وذلك لأن جميع عناصرها مجتمعة في مكان واحد (كما سنرى) , كما تقوم بتنفيذ قسم معين من البرنامج لعدد معروف ومحدد من المرات. دعونا نأخذ مثالا يوضح لنا هذا الكلام: كود PHP: int j; for(j=0; j<15; j++) Print(j); كيف تعمل هذه الحلقة في هذا المثال ؟ السطر الأول قمنا بتعريف متغير ما واطلقنا عليه اسم ( j ) .... (راجع درس القواعد syntax) السطر الثاني يحتوي على جملة ( for ) والتي تتكون من الكلمة المحجوزة ( for ) و قوسين ( ) يحتويان بداخلهما على ثلاثة تعبيرات expressions مفصولين عن بعضهما البعض بالفاصلة المنقوطة ( ; ) كود PHP: for(j=0; j<15; j++) هذه التعبيرات expressions الثلاثة هي : تعبير ابتداء الحلقة , تعبير اختبار قيمة المتغير , وتعبير زيادة قيمة المتغير . j=0 ....... تعبير ابتداء الحلقة j>15 ........ تعبير اختبار قيمة المتغير ++j ....... تعبير زيادة قيمة المتغير جسد الحلقة هو الكود الذي سينفذ الشروط اعلاها لعدد محدد من المرات في هذه الحلقة وهذا الكود هو : كود PHP: Print(j); وفي مثالنا هذا العدد المحدد لتنفيذ الحلقة هو 15 مرة. ملاحظة : الجملة ( for ) لا تنتهي بفاصلة منقوطة وذلك لأنها تكون مع جسد الحلقة Print(j); جملة statment كاملة . سنتكلم بشئ من التفصيل عن هذه التعبيرات الثلاثة : * تعبير ابتداء الحلقة The initialization expression : هذا التعبير ينفذ مرة واحدة فقط مع بداية تشغيل الحلقة ( البرنامج ) , ويعطى قيمة افتراضية للبدء ( وهي الصفر في مثالنا هنا j=0 ) يمكننا اعداد متغير الحلقة خارج (قبل) الحلقة نفسها كما في مثالنا : كود PHP: int j; او يمكننا ايضا ان اعداد المتغير داخل الحلقة نفسها كما في هذا المثال: كود PHP: for(int j=0; j<15; j++) السطران السابقان من الأكواد متساويان , لكن الغرض من كل منهم قد يختلف بعض الشئ ( سنعرف تفاصيل المتغيرات واهدافها في درس المتغيرات ان شاء الله ) ببساطة في حالة الأعداد الخارجي للمتغير يجعل كل سطور الحلقة تتعامل معه , اما في حالة الأعداد الداخلي فيجعل سطر جملة ( for ) فقط التي تتعامل معه . يمكننا ايضا عمل تعبيرين ابتدائيين للحلقة (مع متغيرين) والفصل بينهم بفاصلة ( , ) فقط . مثال: كود PHP: int i; int j; for(i=0 ,j=0;i<15;i++) Print(i); * تعبير الأختبار The Test expression: تعبير الأختبار دائما يستخدم تعبيرات مقارنة باستخدام عمليات المقارنة ( رجاء راجع عمليات المقارنة في الدرس السابق ) هذا التعبير (في مثالنا هنا ( j>15 ) يقوم بعقد مقارنة بصفة مستمرة بين قيمة j ورقم 15 طوال فترة تشغيل الحلقة , ووظيفتها تحديد نتيجة المقارنة اما صحيحة true (اي ان قيمة j فعلا اصغر من 15) فيستمر جسد الحلقة ويقوم بتنفيذ الأمر ( print j) , او خاطئة false ( اي ان قيمة j ليست اصغر من 15 ) وهنا تتوقف الحلقة عن العمل وينتقل البرنامج الى الجملة البرمجية التالية . (سأشرح دورة حياة البرنامج في درس لاحق ان شاء الله بتفصيل افضل , هنا فقط ارجو الأنتباه لوظيفة كل جزء ومراجعته) * تعبير الزيادة The Increment expression: تعبير الزيادة يقوم بتغيير قيمة متغير الحلقة ( في مثالنا هنا j عن طريق ++j ) بزيادة قيمته 1 . هذا التعبير ينفذ كأخر خطوة من خطوات الحلقة الثلاثة ( ابتداء الحلقة واختبارها وتنفيذ جسد الحلقة ). وكما نستطيع ان نستخدم اكثر من تعبير ابتداء الحلقة (واكثر من متغير) يمكننا ايضا ان نستخدم اكثر من تعبير زيادة (او نقصان) والفصل بينهم بالفاصلة ( , ) . مثال: كود PHP: int i; int j; for(i=0 ,j=0;i<15,i<;i++,j++) Print(i); لكن لا نستطيع ان نستخدم اكثر من تعبير اختبار واحد فقط في الجملة . ملاحظة أخرى لتعبير الزيادة وهو اننا ممكن ان نستخدم تعبير نقصان ايضا كما في هذا المثال : كود PHP: int i; for(i=15;i>0,i<;i--) Print(i); في هذا المثال سيبدأ المتغير i بأخذ القيمة 15 الأفتراضية ومن ثم يبدأ الحلقة , وفي مراحل التنفيذ كل مرة ينقص القيمة بمقدار 1 ومن ثم يعمل لها اختبار i>0 ... وهكذا دواليك في النهاية سيخرج لنا البرنامج (الحلقة) هذه النتائج : 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 . ** جسد الحلقة Loop body: يمكننا استخدام عدة جمل statments في جسد الحلقة لأخراج نتائج الحلقة . في مثالنا السابق استخدمنا جملة واحدة فقط ( print j ) في جسد الحلقة , ويمكننا اضافة اكثر من جملة عليها . عند اضافة اكثر من جملة في جسد الحلقة نحددهم بهذه الأقوس { } . مثال: كود PHP: for(int i=1;i<=15;i++) { Print(i); PlaySound("alert.wav"); } في هذا المثال , جسد الحلقة يحتوي على جملتين برمجيتين , البرنامج سينفذ الأولى اولا وبعدها ينفذ الثانية في كل مرة. ولا تنسى ان تضع الفاصلة المنقوطة ( ; ) في نهاية كل جملة . ** جملة الكسر The Break statment : هي كلمة محجوزة من كلمات لغة MQL4 وظيفتها انهاء الحلقة عند قيمة محددة . يتم وضعها كجملة تنفيذ في جسد الحلقة لتنهي الحلقة عند وصول المتغير لقيمة محددة ونقل البرنامج الى حلقة اخرى او جزء اخر . مثال توضيحي : كود PHP: for(int i=0;i<15;i++) { if((i==10) break; Print(i); } في هذا المثال سيتم تنفيذ الحلقة حتى يصل المتغير i الى القيمة 10 , وبعدها تقوم الكلمة المحجوزة ( break ) بانهاء الحلقة. في النهاية سينتج البرنامج هذه النتائج : 0 1 2 3 4 5 6 7 8 9. ** جملة الأستمرار The Continue Statement: جملة الكسر أخرجتنا من الحلقة , ولكن جملة الأستمرار هذه ستعيدنا الى الحلقة في حالة خروجنا منها . مثال توضيحي: كود PHP: for(int i=0;i<15; i++) { if(i==10) continue; Print(i) } في هذا المثال سيتم تنفيذ الحلقة حتى تصل قيمة المتغير i الى 10 وبعدها يجد الكلمة المحجوزة ( continue ) لتعيدنا ثانية الى الحلقة دون اخراج النتيجة ( 10 ) من الحلقة . وتخرج النتائج هكذا من البرنامج : 0 1 2 3 4 5 6 7 9 11 12 13 14 ( لاحظ عدم وجود النتيجة 10 ). 2- الحلقة ( while ) : الحلقة ( for ) نستخدمها عادة في حالات التكرار لمرات انت تعرف عددها وتبرمج على اساسها , حسنا ماذا سيحدث لو لم تعرف عدد مرات التكرار التي تود استخدامها ( قد يستمر التكرار الى الأبد ) . لهذا السبب ظهرت الحلقة ( while ) . الحلقة ( while ) تشبه الحلقة ( for ) في تعبير الإختبار فقط , ولكنها لا تملك تعبير ابتداء الحلقة وتعبير الزيادة . دعونا نرى مثالا توضيحيا : كود PHP: int i=0; while(i<15) { Print(i); i++; } في هذا المثال ستلاحظ الأتي : a- متغير الحلقة تم اعداده declaration وابتداؤه قبل الدخول في الحلقة , لا يمكنك ان تعد او تبدأ المتغير داخل الحلقة بين القواس مثل الحلقة ( for ). b- ال ( ++i ) ليست تعبير زيادة كما تظن , وانما يجب على جسد الحلقة ان يحتوي على اي جملة يمكنها من تغيير قيمة المتغير والا لن تنتهي ابدا ( مثلا لو لم تكن ++i موجودة سيقوم البرنامج بأطلاق النتيجة صفر الى ما لا نهاية ) * كيف يعمل المثال السابق ؟ جملة while تحتوي فقط على تعبير الأختبار فقط , وستظل تختبر الشرط كل مرة بدخول الحلقة , لو كانت نتيجة الأختبار ( المقارنة ) صحيحة true ستستمر الحلقة , وان كانت خاطئة ستنتهي الحلقة ويتم انتقال الى جملة لخرى في البرنامج .. وهكذا . في مثالنا ستسمر الحلقة بتنفيذ اوامرها حتى تصل الى 16 , ففي هذه الحالة i<15 تكون خاطئة false وتنتهي الحلقة . وكما اخبرتكم بتشابه الحلقتين هناك ايضا اوجه شبه اخرى مثل : 1- نستطيع ان نستخدم جملة الكسر وجملة الأستمرار في كليهما . 2- يمكنك وضع جملة واحدة او اكثر في جسد الحلقتين , وفي حالة وضع اكثر من واحدة يجب وضعهم داخل الأقواس { } . في الدرس القادم بأذن الله سنتكلم عن الحلقات والقرارات ( جزء 2) نسألكم الدعاء ولا تنسو تقييم الموضوع باللايكات |
الدرس الخامس .. الحلقات والقرارات (جزء 2)
بسم الله الرحمن الرحيم
مرحبا بكم في الدرس الخامس ... الحلقات والقرارات (جزء 2) تحدثنا في الدرس السابق عن الحلقات وكما ذكرنا من قبل , فالحلقات هي احدى طريقتين تقومان على تغيير التسلسل الطبيعي لتنفيذ اوامر البرنامج من القمة للقاع ( راجع الدرس السابق ). حسنا , الطريقة الأخرى هي القرارات decisions . القرارات decision هي جملة برمجية تقوم بعمل انتقال امر برمجي لمرة واحدة لجزء أخر من البرنامج معتمدا على قيمة المتغير. (هذا الدرس اسهل من الدرس السابق وستروا بأنفسكم ) هناك عدة انواع من القرارات في لغة MQL4 : 1- الجملة الشرطية ( إذا ) .. ( if ) : ( إذا أخطأ علي فاضربوه ) .. حسنا ماذا لو لم يخطئ علي ؟ فلن يتم تنفيذ البرنامج (هذا مثال سريع قبل الدخول في التفاصيل ) الجملة ( if ) هي اسهل انواع الجمل الشرطية ( القرارات ). دعونا نأخذ مثالا : كود PHP: if( x < 100 ) Print("hi"); هنا الكلمة المحجوزة ( if ) جاء بعدها القوسان ( ) وبداخلهم جاء تعبير الأختبار ( هل تتذكروه ) على هذه الصورة ( X<100 ) , متى جاءت النتيجة بين القوسين صحيحة true سيقوم جسد الجملة بتنفيذ الأمر (Print("hi")http://my.mec.biz/images/smilies/wink.png ,, وكمتى جاءت خاطئة false فسينتقل التسلسل التنفيذي للأوامر الى جزء أخر من البرنامج . * الجمل المتعددة في جسد الجملة ( if ) (الأوامر ) : مثل ما رأينا في الحلقات , فالجملة ( if ) يمكن ان تتكون من اكثر من جملة تنفيذية ويحاطون بالقوسين { }. ( لاحظ انه لو وجدت جملة واحدة لن نحتاج الى هذه الأقواس { } ) مثال : كود PHP: if(current_price==stop_lose) { Print("you have to close the order"); PlaySound("warning.wav"); } ملاحظة : العلامة == الموجودة في تعبير الأختبار , هي احد عمليات المقارنة وليست = عملية مساواة (راجع درس العمليات والتعبيرات) ... هذه مصدر العديد من أخطاء الكتابة البرمجية نظرا للتشابه بينهم . * التداخل Nesting : يمكن للحلقات والقرارات ان يتداخلوا في بعضهم البعض , بمعنى انه يمكنك كتابة حلقة ( for ) داخل جملة شرطية ( if ) والعكس بالعكس ... تسمى هذه العملية بالتداخل Nesting . مثال : كود PHP: for(int i=2 ; i<10 ; i++) if(i%2==0) { Print("It's not a prime nomber"); PlaySound("warning.wav"); } في هذا المثال تم وضع الجملة الشرطية (القرار) ( if ) بداخل الحلقة ( for ) . 2- الجملة الشرطية ( إذا .. وإلا ) .. ( if .. else ) : ( اذا أخطأ علي فاضربوه والا فأكرموه ) هنا البرنامج سينفذ ايا من الأمرين , ان أخطأ علي true سيتم ضربه , وان لم يخطئ false سيتم تنفيذ الأمر الثاني وهو الأكرام . http://my.mec.biz/images/smilies/smile.png . هذه الجملة تختلف عن سابقتها ان لها نتيجيتين واحدة في حالة true والأخرى false ( في الجملة if كانت هناك نتيجة واحدة فقط في حالة صحة تعبير الأختبار true اما الحالة false فينتقل البرنامج الى جزء أخر منه ) تتكون هذه الجملة من الكلمة المحجوزة if متبوعة بجملة تنفيذ او اكثر , وكلمة محجوزة أخرى هي else متبوعة بجملة تنفيذ او اكثر . مثال : كود PHP: if(current_price>stop_lose) Print("It’s too late to stop, please stop!"); else Print("you playing well today!"); ترجمة هذا المثال على النحو التالي : إذا (السعر الحالي > وقف الخسارة ) اطبع جملة ("انت متأخر جدا , ارجوك اغلق العقد") والا اطبع جملة ("انت تضارب جيدا اليوم") اعتقد الترجمة هذه تشرح الموضوع كاملا http://my.mec.biz/images/smilies/smile.png * التداخل Nesting في جملة ( if .. else ) : لايمكن لجملة ( if .. else ) ان تتداخل مع جملة ( if ) , ولكن يمكن ان نجعل جملة ( if .. else ) تتداخل مع جملة ( if .. else ) أخرى ... وهكذا . في هذا المثال : كود PHP: if(current_price>stop_lose) Print("It’s too late to stop, please stop!"); if(current_price==stop_lose) Print("It’s time to stop!"); else Print("you playing well today!"); توجد مشكلة برمجية هنا , حيث الجملتين الشرطيتين هنا متعارضتين وسيواجه الكومبيوتر مشكلة ايهما ينفذ ؟ ان جاء السعر اعلى من وقف الخسارة هناك امران احداهما "انتا متاخر جدا , ارجوك اغلق العقد " في الجملة الأولى ,, والأخرى "انت تضارب جيدا اليوم" ( نتيجة انه false ان لم يحدث == في الجملة الثالثة . وهذا خطا برمجي ان يكون هناك اكثر من امر شبيه عند تحقق شروط متشابهة ( فأيهما ينفذ ؟) هناك حل لهذا الأمر : * ان نحيط الجملة ( if.. else ) بكاملها بالقوسين { } مثال : كود PHP: if(current_price>stop_lose) { Print("It’s too late to stop, please stop!"); if(current_price==stop_lose) Print("It’s time to stop!"); else Print("you playing well today!"); } ومن الأفضل تجنب التداخل مع جملة ( if .. else ) 3- الجملة الشرطية ( التوزيع ) .. ( switch ) : تستخدم هذه الجملة في حالة تعدد القيم لمتغير واحد فكل قيمة لها تنفيذ برمجي محدد . دعونا نرى مثالا : كود PHP: switch(x) { case 'A': Print("CASE A"); break; case 'B': case 'C': Print("CASE B or C"); break; default: Print("NOT A, B or C"); break; } كيف يعمل هذا الكود (الجملة البرمجية في المثال) ؟ تبدا الجملة بالكلمة المحجوزة switch لتوزع اوامر التنفيذ لقيم النتغير x المختلفة . وتاتي الأوامر بين القوسين { } . الجملة switch تربط المتغير x بجميع القيم الداخلة للبرنامج وتتعامل معها على هذا النحو : في حالة x==A سيخرج الكومبيوتر الناتج ( case A ) والا سينفذ الأمر Break (راجع هذا الأمر في الدرس السابق) في حالة x==B او x==C سيخرج الكومبيوتر الناتج ( case B or case C ) وذلك لعدم وجود الأمر Brea. في حالة !==x اي ان x لا تتطابق مع اي من القيم السابقة سيخرج الكومبيوتر النتيجة الأفتراضية ( Not caseA,caseB or case C ) في الدرس القادم بأذن الله سنتكلم عن الوظائف في لغة MQL4 |
رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
الله الله عليك يا مازن تتحفنا بطريقتك المميزة
مشكور ولك مني احلى لايك متابعين معك يا غالي |
رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
مشكور جدا اخي الكريم
وفي انتظار القادم وعلى فكرة ما نسيت اللايكات ولك في كل درس لايك مني تحياتي لك على مجهودك الطيب |
رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
اقتباس:
|
رد: الى كل من يريد تعلم لغة MQL4 وباحترافية عالية ...اذن هنا تجد ما تريد
اقتباس:
|
الدرس السادس .. الدوال
بسم الله الرحمن الرحيم
مرحبا بكم في الدرس السادس ... عالم الدوال في لغة MQL4 الدوال في اي لغة برمجية هي عصب البرنامج وقارب النجاة لكل مبرمج. الدوال functions هي عبارة عن جمل statements متجمعة (هناك جمل مستقلة ولا تحتاج للتجمع لتكوين دالة مثل الحلقات والقرارات) دعونا نبدأ الدرس . * ماذا نعني بالدوال functions ? الدالة تشبه في طريقة عملها طريقة عمل مشواة اللحم , فأنت عليك ان تضع اللحم والبهارات وهي عليها ان تخرج لك الكباب المشوي اللحم والبهارت هما المعرفات والتغيرات واسم الدالة , والكباب هو ناتج الدالة والذي يمثل بقيمة return , اما المشواة ذاتها فهي جسد الدلة . هناك اختلاف وحيد بين المشواة والدالة وهو ان بعض الدوال لها ناتج خالي (لاشئ) (ويمثلها في لغة MQL4 بالكلمة المحجوزة void) دعونا نأخذ بعض الأمثلة : كود PHP: double my_func (double a, double b, double c) // المعرفات والمتغيرات ( اللحم والبهارت) { return (a*b + c); // ناتج الدالة (الكباب) } كما نرى في المثال اعلاه , الدالة بدأت بتحديد نوع الناتج (الكلمة المحجوزة double) , وبعدها اسم الدالة متبوعة بالقوسين ( ) . بداخل تلك الأقواس ( ) سنضع اللحم والبهارات . اسف اقصد المعرفات ومتغيراتهم http://my.mec.biz/images/smilies/smile.png هنا عندنا 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 اخوتي الكرام لا تنسوا دعمنا باللايكات وتقييم الموضوع |
الساعة الآن 06:59 AM |
Powered by vBulletin® Copyright ©2000 - 2024
جميع الحقوق محفوظة الى اف اكس ارابيا www.fx-arabia.com