(第一单元)第3小节:变量
外部变量
1、主要特征
常用的外部变量关键字有input 和 extern,都可以用于定义外部参数修改页面的变量,但实际细节有些差别
- 带有input修饰符的变量:内部可访问和读取,但不能在程序内部更改或再赋值,必须在外部程序属性里更改其值;
- 带有extern修饰符的变量:可以在程序运行期间同时在程序内部和外部修改其值,并在每次被初始化时恢复为外部值;
2、显示样式
严格编译模式下,变量字段在外部可以显示注释名称;反之只显示变量名
变量分类
变量大致可以分为全局变量和局部变量两种,是在编程中常见的两种变量类型,它们在作用域、生命周期和访问范围等方面有所区别。以下是对全局变量和局部变量的介绍。
1、全局变量:
- 特点:在程序的任何地方都可以访问的变量,在整个程序执行过程中都存在。
- 作用域:全局变量的作用域是整个程序。
- 声明和定义:通常在函数外部声明和定义全局变量
- 生命周期:生命周期与程序的生命周期相同,即在程序启动时创建,在程序结束时销毁。
- 访问范围:可以被程序中的任何函数或模块访问和修改数据。
- 用途解析:用于保存需要长期保留的数据
2、局部变量:
- 特点:在局部范围内可见和访问的变量。
- 作用域:局部变量的作用域仅限于其所属的代码块或函数,超出该范围后将不再可见。
- 声明和定义:在函数内部声明和定义局部变量。
- 生命周期:在所属的代码块或函数执行期间存在,当代码块或函数执行结束时,局部变量会被销毁。
- 访问范围:只能在其所属的代码块或函数内部访问,其他代码块或函数无法直接访问。
- 用途解析:用于存储函数内的临时数据
3、静态变量
静态变量是一种特殊类型的局部变量,以“static”关键字标识,具有以下特点:
- 生命周期延长:与普通局部变量不同,静态变量的生命周期不仅限于其所在的代码块,而是在整个程序的执行期间都存在。
- 初始值仅赋值一次:静态变量在首次访问时被赋予初始值,之后每一次修改和调用时,静态变量都会记录上一次的值。
- 作用域:静态变量仍然具有局部作用域,仅在定义它们的代码块内可见和可访问。
使用注意事项
- 命名冲突:在程序中,应避免全局变量和局部变量之间的命名冲突,以免造成混淆和错误。
- 变量初始化:在使用变量之前,确保对其进行初始化,以避免使用未初始化的变量导致的不确定行为。
- 作用域限制:在设计程序时,应根据需要选择合适的变量作用域,避免将变量的作用域扩散到不必要的范围。
- 变量的生命周期:对于全局变量,应谨慎管理其生命周期,确保在适当的时候创建和销毁。对于局部变量,避免在超出其作用域的范围内访问。
命名规范
当编写 MQL4 代码时,正确的命名规范可以帮助提高代码的可读性和维护性,养成良好的命名规范习惯,也是编程过程中的一项基础必修课,以下是命名中的一些建议:
-
使用有意义的变量名:选择能够准确描述变量用途的名称。避免使用单个字母或无意义的缩写。
-
使用小驼峰命名法:变量名的第一个单词首字母小写,后续单词首字母大写,不使用下划线或其他分隔符。小驼峰命名举例:myVariable。
-
避免使用保留关键字:确保变量名不是 MQL4 中的保留关键字(常量),以避免编译错误。
-
使用清晰的命名:选择能够清晰表达变量用途的名称。尽量避免使用含糊不清、容易混淆的变量名。
-
使用英文单词:使用英文单词来命名变量,以确保代码的一致性和易读性,虽然说很多语种是直接支持命名的比如中文,但是为了减少错误发生,尽可能用英文(一部分老外的EA乱码其实就是这个问题导致本地字库匹配失败)。
-
避免过长的变量名:变量名应该足够描述其用途,但也不要过长,以免影响代码的可读性。
-
注意大小写:MQL4 对变量名的大小写是敏感的,因此要确保在使用变量时大小写一致。另外,由于MQL4中保留常量多数以大写表示,为了不混淆,尽可能避免全大写命名
-
避免非法命名:根据MQL4的命名规范,变量名不能以数字开头;必须以字母或下划线开头。否则编译器将会报错。以下是一些合法的变量名示例:
本节知识点
- input关键字:外部输入(不可在内部更改)
- extern关键字:外部输入(可以在内部更改)
- 用于在整个代码中共享数据:全局变量
- 用于函数中保存临时计算数据:局部变量
- 用于在函数中长久记录数据上一次的数据:静态变量
- 同一个作用域内,不能有相同命名的变量名称
- 命名规范:不能使用数字开头,尽量不使用除英文字母以外的变量命名