当前位置: 首页 > news >正文

aardio编程中的常量

aardio编程中的常量

二. 常量( constants ) #

在程序运行过程中,用来存储数据值并且其值不能被改变的对象称为常量,常量赋为非 null 值以后就不能再更改值。

常量名使用首字符为下划线且长度大于 1 个字节、小于 256 个字节的标识符表示,单个下划线符号仍然表示变量而非常量。

字面常量( literal constants )

字面常量是指以数值、字符串等字面值直接表示数据的常量对象。
123,"abc"这样的值被称之为字面值,并且这些值在运行时是不可更改的常量。

命名常量( named constants )#

aardio 中的命名常量都是在运行时初始化值。如果常量的值为 null,则可以赋值为非 null 值,之后就不能再修改值。常量重复赋于相同的数字或字符串等常量值会被忽略(不会报错),修改非 null 常量的值将会抛出异常错误。

  1. 命名空间常量( namespace constant ) #

    表对象( table )的成员名称如果首字符为下划线,并且长度大于 1 个字节并小于 256 个字节,则是一个只读成员( readonly member )。

    参考:表的只读成员

    命名空间也是一个表对象( table ),命名空间的只读成员我们称之为"命名空间常量"。

    "命名空间常量"与"命名空间变量"一样默认创建于当前命名空间 (self 命名空间 )。

    示例:

    _const = 123; //初始化命名空间常量
    _const = 123; //没有修改常量,被忽略
    _const = 456; //出错,抛出异常:不能修改只读成员
    

    要特别注意,命名空间或表的只读成员并不要求是合法标识符,例如:

    self["_ (不是合法标识符)"] = 1;
    self["_ (不是合法标识符)"] = 1234;//报错,不能修改常量
    

    在对象的元表中指定元属性 _readonly = false 可禁用读成员保护,这样就可以自由修改名字以下划线开头的表成员。如果在表对象的元表中不设置 _readonly 则默认启用只读成员保护(所有名字以下划线开头的成员禁止修改非 null 值)。

    如果元表中设置 _readonly 为任何非 null 值都会被强制转换为 false, 该值一旦设置以后即不可修改,如果希望启用只读成员保护,唯一的方法就是不设置该属性。

    全局命名空间( global 对象 )将元属性 _readonly 设置为任何值都会被忽略,global 的只读成员保护总是启用状态。

    参考:_readonly 元属性

  2. 全局常量( global constant ) #

    "全局常量"特指全局命名空间只包含大写字母、数字或下划线的命名常量,同样要求首字符为下划线,并且长度大于 1 个字节并小于 256 个字节。

    全局常量的第一个非下划线字符必须是大写的英文字母(不能是数字或者中文字符)。

    "全局常量"可以直接在任何命名空间使用,并且不需要再添加表示全局命名空间的 .. 前缀。

    "全局常量"不能与普通变量、局部变量同名,且无法被覆盖。例如 var _GLOBAL 会报语法错误。

    应避免滥用"全局常量"。 实际上滥用全局对象是不好的习惯,更好的方法是将它们放入适当的命名空间。如果理解了滥用全局对象会不知不觉增加程序的复杂度,意谓着您已经成为了一名有经验的程序员。

    作为动态语言,大量的全局常量也会占用不必要的运行时资源。将值固定不变的全局常量改为利用智能提示的自动输入为字面常量并加上注释是一个不错的优化方案(如果可能需要调整常量值就不要这样做)。这种优化技术被用于 libs\win\#DEFINE.aardio (这不是一个库,放在库目录下仅仅是为了让扫描常量声明到智能提示数据库)。

    libs\win\#DEFINE.aardio 中的部分智能提示配置演示:

    /**intellisense() 
    _TRUE=@1/*_TRUE*/
    _FALSE=@0/*_FALSE*/
    _NULL=@0/*_NULL*/
    end intellisense**/
    

    aardio 开发环境里提供将全局常量自动转换为上面这种智能提示模板的工具。在智能提示配置中,提示文本的第一个字符如果为 @ 就表示这是一个自动完成的代码模板。例如我们在 aardio 编辑器中输入 _TRUE 时,可以利用智能提示的代码补全功能将 _TRUE 自动转换为 1/*_TRUE*/

    所有系统 API 用到的全局常量,在 aardio 里首字符都会多一个下划线 _(除非首字符已经是下划线),这些全局常量都是大写的。 

  3. 保留常量 #

    在合法标识符前加上 :: 前缀,可将其转换为全局有效的保留常量。

    保留常量的规则如下:

    • 保留常量也是全局有效的常量,属于全局命名空间的成员。
    • 保留常量一旦赋为非 null 值后同样不可修改。
    • :: 后面必须是合法的标识符,首个字符不能是小写字母或者下划线。
    • :: 在编译期按编译顺序向后生效, 生效的保留常量即使省略 :: 前缀仍然是保留常量。因为我们难以让不同文件的保持不变的加载与编译顺序,所以任何时候都不应当省略 :: 前缀。
    • 保留常量不能与普通变量、局部变量同名,且无法被覆盖。应避免滥用保留常量,aardio 标准库只将少量的系统 DLL 模块、系统 API 函数定义为了保留常量。

    常量仅能初始化赋值一次,对于相同的字符串或数值 —— 重复赋于相同的值会被自动忽略。如果是其他值则不能保证每次创建的值是相同的,为避免无意中修改常量值导致异常,可使用 := 操作符赋值。

    例如:

    ::Kernel32 := raw.loadDll("Kernel32.dll");
    

    a := b 赋值等价于写 a = a : b ,这里的 : 为"逻辑或"操作符,等价于写 a = a or b。 

http://www.hskmm.com/?act=detail&tid=27843

相关文章:

  • CF2145E Predicting Popularity
  • 偏微分方程数值解法
  • 2025 年 英国 / 澳洲 / 香港 / 美国 / 加拿大 / 留学机构推荐:金矢留学服务解析,从院校资源到全程规划的优质之选
  • 基于MATLAB的二阶同步挤压小波变换(WSST2)实现
  • 2025 年聚丙烯酰胺厂商最新推荐排行榜:聚焦优质企业,助力企业精准选购环保水处理耗材PAM/沉淀剂/脱泥药剂/阴离子/阳离子聚丙烯酰胺厂商推荐
  • 半导体行业文件摆渡系统:守护核心数据安全,赋能高效协同!
  • 电商-数据库分库分表方案 - 努力-
  • VMware 17.6 虚拟机 永久免费版安装包下载及安装教程!
  • 使用perf进行性能分析-入门级别
  • PySimpleGUI 如何像VB那样精确布局?
  • 并查集
  • 2025 年干燥机厂家最新推荐排行榜:聚焦实验室 / 工业用优质设备,精选实力企业权威指南喷雾/造粒/工业喷雾/陶瓷喷雾/制粒/奶粉喷雾干燥机厂家推荐
  • aardio fsys.file创建文件,写入文件报错的替代解决办法
  • Mac OS npm报错
  • npm install 遇到的灵异问题
  • Minix3-操作系统学习
  • 有限差分法
  • 电商-订单查询优化方案 - 努力-
  • 2025 年折弯机厂家最新推荐排行榜:数控 / 电液伺服 / 液压机型权威测评,领先企业深度解析
  • 2025 年最新推荐切割机厂家排行榜:全包围 / 半包围激光切割机及金属、等离子切割机优选品牌单平台光纤激光/大功率光纤金属/全自动等离子切割机厂家推荐
  • 2025航空插头实力厂家最新推荐排行榜:技术精湛与品质卓越的
  • Springboot项目开发一览 - 吾辈当奋斗
  • 企业数字化转型必备:纷享销客CRM如何助力企业突破数据瓶颈
  • P7457 [CERC2018] The Bridge on the River Kawaii
  • 2025 年温控器厂家最新推荐排行榜:涵盖电子式/机械式/双恒温/紧凑型温控器等多类型,综合性能、创新与口碑的权威榜单
  • 2025 年 VI 设计企业最新推荐榜:优质机构深度解析,助力企业精准匹配优质品牌视觉解决方案
  • 【Linux基础知识系列:第一百三十九篇】使用Bash编写函数提升脚本功能 - 教程
  • 括号序列构造字典序最小化问题
  • C++ 性能优化:用 CRTP 搭建零开销编译期多态
  • Python 中包(Package)和模块(Module)的区别