在MQL4编程中,理解如何正确使用函数参数是提升代码质量和可读性的关键因素。本文将详细解释函数的形式参数、参数的作用范围、传值与传引用的区别,以及如何为形式参数指定默认值。
形式参数
传递给函数的参数被称为局部变量,其作用范围为函数块。形式参数的名称必须与外部变量和同一函数中定义的局部变量的名称不同。在函数块中,可以为形式参数赋值。如果形式参数使用const修饰符声明,则其值在函数内不能更改。
示例:
void processOrders(const int & orderIDs[], double threshold, bool status)
{
if(threshold > 0.0 && !status)
Print(orderIDs[0]);
...
}
形式参数的初始化
形式参数可以通过常量进行初始化。在这种情况下,初始化值被视为默认值。紧跟在已初始化参数后的参数,也必须进行初始化。
示例:
void processOrders(int orderID, double threshold = 0.0, bool status = true)
{
...
}
调用此类函数时,可以省略已初始化的参数,代替它们的将是默认值。
示例:
processOrders(123, 0.5);
按值传递与按引用传递
简单类型的参数是按值传递的,即在被调用的函数内部对此类局部变量的修改,不会反映到调用函数中。任何类型的数组和结构类型的数据总是按引用传递。如果需要禁止修改数组或结构内容,这些类型的参数必须使用const关键字声明。
同时,MQL4也提供了将简单类型的参数按引用传递的机会。在这种情况下,对这些参数在调用函数内的修改,将影响到传递的引用变量。为了表示参数是按引用传递的,在数据类型后面添加&修饰符。
示例:
void calculatePips(int& orderCount, double& totalPips, double & price[])
{
double sum_pips;
...
for(int i=0; i<OrdersTotal(); i++)
{
if(i==ArraySize(price)) break;
if(OrderSelect(i)==false) break;
price[i]=OrderOpenPrice();
}
orderCount=i;
totalPips=sum_pips;
}
请注意,通过引用传递的参数不能由默认值初始化。
MQL4函数最多可以传入64个参数。掌握这些知识,你就能更有效地编写和管理MQL4函数了。