آشنایی با تابع در MQL: تعریف و فراخوانی تابع!

یکشنبه ۳۰ مرداد ۱۴۰۱ - ۱۴:۳۹

مهم‌ترین انقلاب فناوری در مهندسی کامپیوتر، امکان تولید و ذخیره بخش جداگانه‌ای از کد است که می‌تواند دستورالعمل‌های خاص پردازش داده را برای حل مسائل انجام دهد. این قابلیت در زبان برنامه‌نویسی MQL هم وجود دارد.


تابع یا Function بخش خاصی از برنامه است که یک روش خاص برای تبدیل داده را توصیف می‌کند.


ما در این بخش تابع را از دو جنبه تعریف و فراخوانی آن بررسی خواهیم کرد.

  • تعریف تابع یا Function Description همان‌طور که از نامش مشخص است، بخشی است که کد تابع در آن نوشته می شود.
  • فراخوانی تابع یا Function Call هم یک دستور اجرایی است که تابع را صدا می‌زند و آن را اجرا می‌کند.


مثال‌های زیادی از تابع در زندگی روزمره ما وجود دارند که در درک تابع می‌توانند به ما کمک کنند. به طور مثال، سیستم ترمز یک ماشین مثال خوبی از تابع است. ایده نحوه ترمز و نحوه ترمز گرفتن در ماشین درست مثل تابع در برنامه‌نویسی است. پدال ترمز همان فراخوانی ترمز است. با فشار دادن پدال ترمز، مکانیسم ترمز فعال می شود و ماشین متوقف می شود.


اگر در برنامه‌ای، تابعی فراخوانی شود، تابع اجرا خواهد شد. هدف از نوشتن تابع این است که بخشی از کد برنامه کار مشخص و تکراری انجام می‌دهد را از متن اصلی برنامه کنار بگذاریم و تنها در زمان نیاز آن را فراخوانی کنیم. تابع سه کار مهم را انجام می‌دهد:

  1. تابع خوانایی برنامه را بالا می‌برد.
  2. می‌توان دستورات درون تابع را بدون تغییر در کل برنامه، ویرایش کرد.
  3. تابع را می‌توان در داخل برنامه و یا در یک فایل جداگانه قرار داد. اگر تابع در یک فایل دیگر تعریف شود، می‌توان از آن در برنامه‌های دیگر هم استفاده کرد.

ترکیب یک تابع


هر تابعی را می‌توان تعریف و فراخوانی کرد. در این بخش یک مثال را با هم بررسی می‌کنیم. فرض کنید ما یک برنامه کوچک داریم، مثل تصویر زیر. این برنامه طول وتر مثلث را با استفاده از طول دو ضلع دیگر آن محاسبه می‌کند. این برنامه از تئوری فیثاغورث برای محاسبه وتر مثلث استفاده می‌کند.

آموزش ام کیو ال
آموزش MQL – برنامه ساده برای محاسبه وتر مثلث (تئوری فیثاغورث)


در این برنامه تمامی محاسبات در یک جا قرار گرفته‌اند. دستورات هم تنها یک بار و طبق ترتیبی که در کد برنامه قرار گرفته‌اند (از بالا به پایین) اجرا می‌شوند.
اجازه دهید این برنامه ساده را که یک کار تکراری (محاسبه وتر مثلث) را انجام می‌دهد به یک تابع تبدیل کنیم. تابع به ما اجازه می‌دهد که از آن در سایر برنامه‌ها استفاده کنیم. این تابع دو عدد (طول ضلع اول و دوم مثلث) را دریافت می‌کند و بعد از محاسبه طول وتر، مقدار آن را بر می‌گرداند. به تصویر زیر نگاه کنید:

آموزش ام کیو ال
آموزش MQL – تعریف و فراخوانی تابع فیثاغورث


در تصویر بالایی، محاسبات مربوط به تئوری فیثاغورث که همان فرمول محاسبه وتر مثلث است، در یک تابع تعریف شده است. زمانی که به محاسبه وتر مثلث نیاز است، تنها تابع با نام Gipo(a,b) را فراخوانی می‌کنیم.


هر دو نسخه از برنامه یک کار را انجام می‌دهند و نتیجه هر دو هم یکی است. با این حال در نسخه اول، فرمول فیثاغورث در داخل برنامه و به صورت دستورات ساده نوشته شده و در نسخه دوم در قالب یک تابع آمده است. فراموش نکنید که برای اجرای تابع باید آن را صدا بزنیم. یعنی اسم تابع را بنویسیم و داده‌هایی که قرار است روی آن‌ها محاسبات انجام دهد، در داخل پرانتز بنویسیم. اگر تابع فراخوانی نشود، اجرا هم نخواهد شد. همچنین اگر تابعی که وجود ندارد را فراخوانی کنید، اتفاقی نخواهد افتاد و تنها یک خطا در زمان اجرای کامپایلر برنامه متاادیتور ظاهر خواهد شد.

چگونه تابع را تعریف کنیم؟


تعریف تابع از دو بخش تشکیل شده است: سر و بدنه تابع!


سر یا هدر تابع شامل نوع داده بازگشتی تابع است. یعنی تابع بعد از محاسبات، چه نوع داده‌ای را به برنامه باز خواهد گرداند؟ سپس نام تابع آمده و در ادامه هم پارامترهای تابع تعریف می‌شوند. پارامترها همان داده‌هایی هستند که تابع روی آن‌ها پردازش انجام می‌دهد. لیست پارامترهای تابع در داخل پرانتز قرار می‌گیرند و بعد از نام تابع ذکر می‌شوند.

آموزش ام کیو ال
آموزش MQL – نحوه تعریف تابع


نوع داده‌ای که تابع باز می‌گرداند می‌تواند int، double، bool، color، datetime یا string باشد. اگر تابع مقداری باز نگرداند، باید از void استفاده کرد. یعنی تابع مقداری باز نمی‌گرداند.


بدنه تابع در داخل آکولاد قرار می گرد. بدنه تابع دستورات ساده و ترکیبی را شامل می شود. بعد از اجرای دستورات و پردازش پارامترها، نتیجه محاسبات تابع به کمک عملگر return() به برنامه ارسال می‌شوند. نوع داده‌ای که توسط عملگر return() باز گردانده می شود، باید با نوع تابع که در بخش هدر تعریف شده، یکی باشد.


کدهای تعریف تابع باید از بدنه اصلی برنامه جدا باشد و در خارج از سایر توابع قرار گیرد.

فراخوانی تابع یا Function Call


فراخوانی تابع یعنی استفاده از تابع! برای فراخوانی کافی است نام تابع را بیاوریم و در داخل پرانتزها هم پارامترها را قرار دهیم. فراخوانی تابع شامل نام تابع، پارامترها و سمی کالن می شود.

آموزش ام کیو ال
آموزش MQL – فراخوانی تابع


فهرست مطالب آموزش مقدماتی برنامه‌نویسی MQL: