程序中除了条件判断,就属循环用的多。为什么?同样的动作,你做一万次,累不累呀?用个循环,装一个变量,让计算机自己算去。您还别说,计算机就爱这个循环操作,那是他的老本行啊。【CPU执行周期了解下】
MQL5中提供了3中循环方式,while, do - while, for。
这是MQL内最简单的循环句子。判断条件成立,一直执行下去。说的不明白,看例子:
bool c = true;
int count = 1;
while(c==true) // 当然成立
{
Print(count);
if(count == 5) c = false; // 注意,就靠这个赋值操作,while循环得以终止
count ++;
}
这是在while内部使用判断,然后修改循环标志位c,终结了while循环。您也可以使用下面的方式:
int count = 1;
while(count <= 5)
{
Print(count);
count ++;
}
因为count自加,那么到6的时候,while内的判断条件编程 6 <= 5,不成立,终止了while。也成功跳出了循环。
优化之后的程序,少了一个变量,少了一句条件判断和赋值,代码量减少了2行。效率丝毫不差,代码更易阅读了。所以下方代码更好。
while语句是判断条件为假,直接退出,不执行。下面说一说 do - while。这个与while略不同。是直接执行,先执行再判断。看例子:
int count = 1;
do
{
Print(count); // 输出: 1, 2, 3, 4, 5
count++;
}
while(count < 5)
看到了吗,如果想要输出与while相同的语句,此处的判断变为 count < 5,没有判断=。因为先执行了do语句块。输出count=5后,执行了count++,此时count=6。接着while执行判断 count < 5,不成立,退出。如果条件写成 count <= 5,那就会多输出一个6。
您记清楚这一点区别了吗?
如果让我说,更倾向于while语句直接来,符合直觉,写起来结构也比do-while简洁。
这个放最后介绍,其实是程序里第一受欢迎的语句。无论哪种编程语言,无一例外均提供了for循环的实现,而且,与c最早发明的用法,基本无二。
for(int count = 1; count <= 5; count++){
Print(count);
}
第一个表达式,在循环开始前无条件求值(并执行)一次;
第二个表达式,在每次循环开始前求值。如果值为TRUE
,则继续循环,执行嵌套的循环语句。如果值为FALSE
,则终止循环。
第三个表达式,在每次循环之后被求值(并执行)。
这个for循环丧心病狂到什么地步,这是哪个表达式,可以一个都不用写,单纯写个分号就可以。
for(;;){}
请问这个玩意儿能干什么?等价于 while(true){},等价于 do{}while(true)。无限循环!
书归正传。
for循环很好用,良心之作,遵循其定义方式,您可以写出万花筒式的操作语句:
for(int a = 1, b = 2; a <= 5; a++, b += 2)
{
Print("a=",a," b=",b); // 输出: "a=1 b=2", "a=2 b=4", ...
}
第一个表达式,初始化 a=1,b=2
第二个表达式,如果满足,for循环结束。
第三个表达式,让每次a = a+1, b = b + 2。
所以基于上述分析,输出结果也确切可期。
手动跳出循环,或者提前跳出循环,就是break了。名字与其含义相同。
for(int count = 1; count <= 5; count++)
{
if(count == 3) break;
Print(count); // 输出: 1, 2
}
当循环进行到count = 3时,break,跳出整个循环。
上面的break终止了循环并跳出,那有没有说这轮循环我不用执行某些语句,让for接续执行下一轮呢?有的,continue就是做这个的。
int count = 1;
while(count <= 5)
{
if(count == 3) continue;
Print(count); // 输出: 1, 2, 4, 5
count++
}
还是这个例子。=3的时候,这一轮可以不用执行。那么直接continue,告诉for,下一个吧,这轮到这儿就可以了。
以上语句可灵活使用,共同控制程序运行。