MQL5语言帮助文件人话版(八)数据类型之布尔型

| 发表于 前天 13:12 | 显示全部楼层 |复制链接
第八章 布尔数据类型

一、编程新手感悟

布尔数据类型在官方手册中只有寥寥几句话介绍。这个类型看起来很简单,对应底层 0 与非 0,分别代表假和真。我们写代码时,可以把数字 0 或者非 0 数值赋值给 bool 变量,也可以直接使用字面关键字false和true。

单纯照着手册学到这里,对于普通 MQL5 开发差不多就够用。但布尔型毫无疑问是编程中最重要的数据类型之一,同时也是继续理解“用数字代替事件”这种认知的代表,所以在这里我还需要补充一点自己的理解:

“假与真、不成立与成立、是与不是”,这些都是人类赋予的语义。对于程序而言,bool 仅仅维护两种互斥的状态。在计算机最底层,体现为 0 或者非 0 的数字;在 MQL5 语法层面,使用false、true来代表这两种状态,这两个词属于语言的关键字。

bool 本身并不理解人类语言意义上的真与假。它只遵守互斥规则:取其中一种状态,就不可能同时是另外一种,除这两种状态之外,bool 变量不允许保存别的结果。本质上,bool 是一个被语言强制约束的 “非此即彼的选择题容器”

如果语言没有提供 bool,我们完全可以自己定义一个整型变量,人为约定:条件满足赋值 1,不满足赋值 0,以此实现和布尔逻辑近似的效果。早期 C89 C 语言就是这样处理逻辑判断的。

但自己定义的整型变量不受约束:它可以接收任意合法整数,可以是 0、1,也可以是 2、3、45678 等其他数值。这些数值本身在语法上完全合法,只是会破坏我们自己 “只用 0 和 1 代表逻辑” 的业务约定。前面的业务约定没有这些内容,后续代码读到意料之外的数字,就会造成逻辑 bug。

还要记住一点:bool 自身不具备条件判断能力,它只负责转换并存放结果。当向 bool 变量赋予一个非 0 数字时,不管这个数字具体是几,都会被转换为布尔状态true,原始的数字值会直接丢弃,这些数值只有表示真假的意义,没有数学上的其他意义。

这就是现代编程语言普遍提供 bool 类型的目的:当我们需要做二选一逻辑的时候,强制约束变量只能是两种状态之一,消除歧义。

MQL5 很多内置函数的形参、以及 EA 外部输入参数面板,都专门接收 bool 类型;如果使用普通整型模拟真假,不仅语义模糊,也无法获得勾选框这类界面特性。

二、布尔数据类型

布尔类型是用来存储true或者false的逻辑值的,它们的数字表示法分别是1和0。

示例:

bool a = true;
bool b = false;
bool c = 1;

布尔类型(bool)内置最多占用 1 字节。

在逻辑表达式中,不仅可以直接使用布尔值(即true、false),还可以使用任意整型数值参与运算;编译器不会报错。规则为:数值 0 代表 false,一切非 0 的数值都代表 true。

在类似if()、while()、 ?:(三元条件运算符)、&&(逻辑与符号)、||(逻辑或符号)、! (逻辑取反符号)这类判断场景的逻辑表达式中,你不必只写 true / false,放 int、char、long 等整数型数字都合法,编译器不会报错。

核心判定规则:整数 = 0 → 等价 false(假),整数 ≠ 0(包括负数) → 等价 true(真)。

不要写 if(x == true)。true 在 MQL5 内部常量实际等价数值是 1。假设 x=-1,非 0 本应是真;但 x == true 等价于 -1 == 1,结果变成 false,逻辑出错!
最近访问 头像模式
举报

评论 使用道具

发新帖
EA交易
您需要登录后才可以评论 登录 | 立即注册