在编程过程中,我们会经常将复杂的任务分解为一系列子任务,这种方法称为“逐步细化”。在MQL4编程语言中,我们可以使用函数来编写这些子任务的代码。本文将对MQL4中的函数进行详细解析。
函数的定义
函数是代码中的一个模块,用于执行特定的任务。函数定义由函数头部和函数体两部分组成。函数头部包含返回值类型、函数名和形式参数的描述,而函数体则包含实现函数功能的具体代码。
function_header
{
instructions
}
在上述代码中,function_header
是函数的头部,instructions
则是函数体中的指令。需要注意的是,传递给函数的参数数量有限制,不能超过64个。
函数可以在程序的其他部分多次调用。实际上,返回类型、函数标识符和参数类型构成了函数的原型。
函数原型是函数声明,但不是其定义。由于明确声明了返回类型和参数类型列表,因此在函数调用过程中可以进行严格的类型检查和隐式类型转换。函数声明常用于类中,以提高代码的可读性。
函数定义必须与其声明完全匹配,每个声明的函数都必须定义。
例如,以下是一个函数的定义:
double linfunc (double x, double y)
{
return (x + y);
}
在这个例子中,linfunc
是函数名,double x, double y
是参数列表,double
是返回值类型,return (x + y);
是函数体。
return
运算符可以返回位于此运算符中的表达式的值。必要时,表达式的值将转换为函数结果类型。可以返回的内容包括:简单类型、简单结构、对象指针。但不能返回数组、类对象、复合结构类型的变量。
对于不返回任何值的函数,应将其描述为void
类型。例如:
void showMesg(string msg)
{
Print("message: "+ msg);
}
函数参数和默认值
传递给函数的参数可以有默认值,这些默认值由该类型的常量定义。如果参数有默认值,则所有后续的参数也必须有默认值。
例如,以下是一个函数的定义,其中参数有默认值:
int myFunc(double p,
double q=0.0001,
int r=5,
bool s=true,
string t="sample string")
{
Print("Required parameter p = ", p);
Print("Pass the following parameters: q = ", q, " r = ", r, " s = ", s, " t = ", t);
return(0);
}
如果没有指定默认值,例如:
int myFunc(double p,
double q=0.0001,
int r,
bool s,
string t="sample string")
{
}
上述代码就是一个错误的声明,因为一旦参数q
有默认值,那么在其后的所有参数(这里是r
和s
)都应该有默认值。
总的来说,函数是MQL4编程语言的重要组成部分,有效使用函数可以使我们的代码更加清晰和易于理解。