龙空技术网

MQL5从入门到精通「第四章」(一)条件判断语句

程序员小助手 145

前言:

目前兄弟们对“判断语句和赋值语句的方法”可能比较关切,兄弟们都需要了解一些“判断语句和赋值语句的方法”的相关知识。那么小编也在网摘上网罗了一些有关“判断语句和赋值语句的方法””的相关文章,希望各位老铁们能喜欢,咱们一起来学习一下吧!

# 判断语句

程序的基础功能之一就是做判断。判断语句通过评估条件的真伪作出决定。MQL5中有三个条件判断语句:if - else,三目操作符,和switch - case语句。

## if语句

前面章节其实我们已经介绍过了,程序内最常用。if语句内可包含许多业务逻辑。

bool c = true;if (c == true){ Print('yes,true!');}

上面的语句当然是真的。

说一个语法糖。就是如果if语句内只有一条语句,那连大括号都可以省了。开头给个tab即可。

bool c = true;// 换一行写if(c == true) Print('yes,true!');// 连着写if(c == true) Print('yes,true!');

效果是一样的。语句以分号结束。这个特性,很多编译型语言都有。每个if少写一对大括号,一个文件能省几十个,一天能省不少时间,几年下来就能大神了!!哈哈~~

int a = 2;if(a > 1) Print('yes');if(a < 3) Print('of course');

这样写,很省心啊。

## else操作符

if语句判断为真执行,那么其他情况呢。条件不成立的其他情况呢?我们也得处理,else字句就是做这个的。

bool c = false;if (c==true) Print('yes');else Print('no');

看到没有,一个if,一个else,把所有的情况都考虑好了,这叫滴水不漏。复杂点儿的例子。说学生成绩60分以下输出不及格,60-80分输出及格,80-100分,优秀。

double score = 78.5;if(score < 60) Print('不及格');else if(score < 80) Print('及格');else Print('优秀');

条件自上而下依次执行,遇到条件满足,就执行其中的语句。注意,如果判断条件写的不合适,有可能接连触发好几个哦。

## 三目运算符

为了简化if-else语句,发明了这个语法糖。

bool c = true;string r = c == true ? 'yes' : 'no';Print(r); // = yes

也即是?之前是判断条件,如果成立,执行:左边的句子,不成立只有:右边的句子。其实相当于:

bool c = true;string r = '';if(c==true){ r = 'yes';}else{ r = 'no';}Print(r); // = yes

上述两段执行效率一样。只是三木运算符,把变量声明,条件判断,语句赋值这三项,合并到一行执行,在编程风格上简洁了不少。可以加大使用力度。

## 分支语句 switch - case

如果判断情况较多,写一堆if不方面,容易形成一大堆乱糟糟的代码。所以switch-case语句。注意,switch-case也不是最好的结构哦。在最佳实践中,很多有名的github上的高评代码库,if-else用的还是最多。为何?方便维护。switch改起来太费劲了。体验不好。而且处处得break,你不跳出,谁知道他给你执行那一段?oh sh!t。

int x = 1;switch(x){ case 1: Print("x is 1"); // 输出: x is 1 break; case 2: Print("x is 2"); break; default: Print("x is not 1 or 2");}

switch语句要求case列举出的是其判断语句的所有可能值,当然还有个default用于处理列举不出来的值。

我们不是写航天代码的,一般控制不了全部的局面,switch用起来就不爽了。所以我个人不推荐。因为你稍不留神,就能写出这些一撸到底的代码:

int x = 1;switch(x){ case 1: case 2: case 3: Print("x is 1, 2 or 3"); // 输出: x is 1, 2 or 3 break; default: Print("x is not 1, 2, or 3"); break;}

看见没,case=1,2,3,一次往下走,只要命中一个,都得把case里的语句走一遍,直到break!

大多数时候,if-else工作的很好的,switch-case给你一个额外的选项,多一个实现的方法。下面举例,比如是给出图表周期,分钟数,如果60分钟=1小时,240分钟=4小时,1440分钟=1天等等:

int period = _Period;string printPeriod;switch(period){ case 60: printPeriod = "H1"; break; case 240: printPeriod = "H4"; break; case 1440: printPeriod = "D1"; break; default: printPeriod = "M" + period;}

if-else也可以写,无非使用if(period==60)这样的格式依次判断即可,不具体写了。

标签: #判断语句和赋值语句的方法