前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MQL5从入门到精通【第四章】(一)条件判断语句

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

作者头像
程序员小助手
发布2020-04-08 11:19:36
9160
发布2020-04-08 11:19:36
举报
文章被收录于专栏:程序员小助手

# 判断语句

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

## if语句

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

代码语言:javascript
复制
bool c = true;
if (c == true){
    Print('yes,true!');
}

上面的语句当然是真的。

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

代码语言:javascript
复制
bool c = true;

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

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

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

代码语言:javascript
复制
int a = 2;
if(a > 1) Print('yes');
if(a < 3) Print('of course');

这样写,很省心啊。

## else操作符

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

代码语言:javascript
复制
bool c = false;

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

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

代码语言:javascript
复制
double score = 78.5;
if(score < 60)
    Print('不及格');
else if(score < 80)
    Print('及格');
else
    Print('优秀');

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

## 三目运算符

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

代码语言:javascript
复制
bool c = true;
string r = c == true ? 'yes' : 'no';
Print(r); // = yes

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

代码语言:javascript
复制
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。

代码语言:javascript
复制
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用起来就不爽了。所以我个人不推荐。因为你稍不留神,就能写出这些一撸到底的代码:

代码语言:javascript
复制
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天等等:

代码语言:javascript
复制
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)这样的格式依次判断即可,不具体写了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员小助手 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • # 判断语句
  • ## if语句
  • ## else操作符
  • ## 三目运算符
  • ## 分支语句 switch - case
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档