开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 326|回复: 8
收起左侧

[其它源码] 易语言规范文档总结++++++规范闲聊

[复制链接]
结帖率:100% (2/2)
发表于 昨天 16:35 | 显示全部楼层 |阅读模式   河南省焦作市
分享源码
界面截图: -
是否带模块: -
备注说明: -
本文档是我在写易语言伪执行器和解析器的时候总结的文档规范,拆分出来的。
个人建议,论坛想写IDE的大佬可以现商量一下语法规范,然后统一规范,这样不管哪个大佬写出来了,都能用同一套标准


# 易语言编程技能规范(完整版)

> 版本:v2.0 · 数据来源:系统核心支持库 5.7(krnln,622 命令)+ 易语言官方语法 + 易语言解析 demo 命令库(7831 条)
> 用途:AI 编写、阅读、审查、修复易语言(EPL)代码的**完整语言规范**

---

## 一、语言概述

- **易语言(EPL)**:中文编程语言,全中文关键字,支持库驱动,Windows 平台为主
- **特点**:全角/半角符号等价(`=`/`=`、`+`/`+`、`“”`/`""`);行注释 `'` 或 `//`;数组下标 **1-based**;判断(switch)语义特殊;控制流**必须带点号**
- **程序结构**:`.版本` → `.程序集` →(`.子程序`/`.类`/`.数据类型`/`.DLL命令`/`.常量`/`.全局变量`)
- **编译模型**:易语言 IDE 编译为 exe(核心库 + 支持库链接);本规范针对源码级语法

## 二、程序结构

```
.版本 2
.程序集 程序集1
.全局变量 全局计数, 整数型

.子程序 _启动子程序, 整数型, 公开
    .局部变量 局部, 整数型
    标准输出 (0, “你好,易语言”)
    返回 (0)
.子程序结束
.程序集结束
```

| 元素 | 规则 |
|------|------|
| `.版本 2` | 必须第一行 |
| `.程序集 名称` | 至少一个程序集;可省略 `.程序集结束` |
| `.全局变量` | 程序集级共享变量 |
| `.子程序 名称[, 返回类型][, 公开]` | 程序入口通常为 `_启动子程序`(整数型) |
| `.子程序结束` | 结束标记(可省略,建议写) |

## 三、词法规范

### 3.1 编码
- 源码标准编码 GBK/GB2312;本工具链统一 UTF-8 处理
- 字符串字面量:半角 `"..."` 或全角 `“...”` 均可

### 3.2 注释
| 形式 | 说明 |
|------|------|
| `' 注释` | 单行注释(最常用) |
| `// 注释` | 单行注释(兼容) |
| `' 行内注释` | 语句行尾注释(声明行尾注释会被提取为"备注/说明") |

### 3.3 标识符
- 中文/英文/数字/下划线均可;不能以数字开头
- 区分大小写**不敏感**(`abc` 与 `ABC` 视为同名)
- 不能与关键字同名(见第四章)

### 3.4 全角/半角
| 类别 | 半角 | 全角 |
|------|------|------|
| 引号 | `"` | `“ ”` |
| 括号 | `( )` | `( )` |
| 赋值号 | `=` | `=` |
| 运算符 | `+ - * / %` | `+ - * / %` |
| 比较符 | `< > <= >= !=` | `< > ≤ ≥ ≠` |

## 四、关键字总表(45 个)

| 分类 | 关键字 |
|------|--------|
| **控制流(19)** | `.如果` `.如果真` `.否则` `.判断` `.默认` `.判断循环首` `.判断循环尾` `.循环判断首` `.循环判断尾` `.计次循环首` `.计次循环尾` `.变量循环首` `.变量循环尾` `.如果结束` `.判断结束` `跳出循环` `到循环尾` `返回` `结束` |
| **操作符(11)** | `相加` `相减` `相乘` `相除` `取余数` `位与` `位或` `位异或` `左移` `右移` `取反` |
| **类型转换(10)** | `到字节型` `到短整数型` `到整数型` `到长整数型` `到小数型` `到双精度小数型` `到逻辑型` `到文本型` `到日期时间型` `到字节集` |
| **常量(2)** | `真` `假` |
| **特殊(3)** | `本对象` `本组件` `本子程序` |

**点号规范(重要)**:
- 控制流关键字**必须带点**(`.如果`/`.计次循环首`/`.判断`/`.如果结束` 等);无点号会被当作命令调用(语法错误)
- `返回` `结束` `跳出循环` `到循环尾` **标准写法不带点**
- `.否则` `.默认` 必须带点

## 五、类型系统

### 5.1 基本类型(12 种)

| 类型 | 字节 | 说明 | 示例 |
|------|------|------|------|
| 字节型 | 1 | 8 位无符号整数 0~255 | `255` |
| 短整数型 | 2 | 16 位有符号整数 | `-32768` |
| 整数型 | 4 | 32 位有符号整数(最常用) | `42` |
| 长整数型 | 8 | 64 位有符号整数 | `4294967296` |
| 小数型 | 4 | 单精度浮点 | `3.14` |
| 双精度小数型 | 8 | 双精度浮点 | `3.14159265358979` |
| 文本型 | 变长 | 字符串 | `“abc”` |
| 字节集 | 变长 | 二进制数据 | `{1, 2, 3}` |
| 逻辑型 | 1 | 布尔 | `真` / `假` |
| 日期时间型 | 8 | 日期+时间 | `取现行时间 ()` |
| 子程序指针 | 4 | 子程序引用 | `取子程序指针` |
| 通用型 | — | 任意类型(多态参数) | — |

### 5.2 类型兼容矩阵

| 源 → 目标 | 整数型 | 长整数型 | 小数型 | 双精度 | 文本型 | 逻辑型 |
|-----------|--------|----------|--------|--------|--------|--------|
| 整数型 | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ |
| 长整数型 | ✗ | ✓ | ✓ | ✓ | ✓ | ✗ |
| 小数型 | ✗ | ✗ | ✓ | ✓ | ✓ | ✗ |
| 文本型 | 可转 | 可转 | 可转 | 可转 | ✓ | ✗ |
| 逻辑型 | ✓ | ✓ | ✗ | ✗ | ✓ | ✓ |
| 字节集 | ✗ | ✗ | ✗ | ✗ | ✓ | ✗ |

- 规则:数值型小→大自动扩宽;逻辑→整数(真=1/假=0);任意→文本;文本↔字节集可互转;`通用型` 兼容一切

### 5.3 数组

```
.局部变量 动态数组, 整数型, , "0"        ' 动态数组
.局部变量 定长数组, 整数型, , "10"       ' 定长 10 个
.局部变量 文本数组, 文本型, 数组          ' 动态数组(参数传递用)

动态数组[1] = 100                        ' 下标从 1 开始!
重定义数组 (动态数组, 假, 20)            ' 重定义大小
```

- **下标 1-based**:`数组[1]` 是第一个元素
- 多维数组:`数组[1, 2]`(下标逗号分隔)
- 声明第 4 段为 `"0"` 表示动态,`"10"` 表示定长,`数组` 表示动态数组

### 5.4 自定义数据类型(结构体)

```
.数据类型 学生信息
    成员 姓名, 文本型
    成员 年龄, 整数型
    成员 分数, 整数型, "3"               ' 数组成员
.数据类型结束

.局部变量 学生, 学生信息
学生.姓名 = “张三”
学生.分数[1] = 95
```

## 六、变量与常量

### 6.1 变量声明

| 关键字 | 作用域 | 位置 |
|--------|--------|------|
| `.局部变量` | 当前子程序/方法内 | 子程序体顶部 |
| `.全局变量` | 整个程序集 | 程序集内(子程序外) |
| `.程序集变量` | 当前程序集 | 程序集内 |

```
.局部变量 名, 类型[, 初值]
.局部变量 计数器, 整数型, 0
.局部变量 名称, 文本型, “默认值”
```

### 6.2 常量

```
.常量 圆周率, 3.14159, 公开, 说明文字
.常量 程序名, “我的程序”
```

- 语法:`.常量 名, 值[, 公开|私有][, 说明]`
- 常量值带引号 → 文本型;纯数字 → 整数/小数型
- 引用方式:直接写常量名

### 6.3 内置常量

| 常量 | 值 |
|------|-----|
| `#换行符` | `\n` |
| `#回车符` | `\r` |
| `#制表符` | `\t` |
| `#引号` | `"` |
| `#空文本` | `""` |

## 七、运算符

### 7.1 完整优先级表(高→低)

| 优先级 | 运算符 | 说明 |
|--------|--------|------|
| 1 | `()` `[]` `.` | 括号、下标、成员访问 |
| 2 | `取反` `-`(负号) | 一元 |
| 3 | `*` `*` `/` `%` `整除` `取余数` | 乘除取余 |
| 4 | `+` `-` | 加减 |
| 5 | `<` `>` `≤` `≥` `=` `≠` `近似等于` | 比较 |
| 6 | `并且` `且` | 逻辑与 |
| 7 | `或者` `或` | 逻辑或 |

### 7.2 运算符全表

| 类别 | 运算符(半角/全角/中文) |
|------|--------------------------|
| 算术 | `+` `-` `*` `/` `%` `整除` `取余数` |
| 比较 | `=` `<>` `!=` `<` `>` `<=` `>=` `等于` `不等于` `大于` `小于` `大于或等于` `小于或等于` `近似等于` |
| 逻辑 | `且` `并且` `或` `或者` `取反` |
| 位运算 | `位与` `位或` `位异或` `左移` `右移` |
| 赋值 | `=` `=` `连续赋值` |
| 一元 | `-`(负号)`取反` `负` |

## 八、表达式

- 表达式由 字面量/变量/函数调用/运算符 组成
- 函数调用即表达式:`结果 = 求和 (1, 2)`
- 成员访问:`对象.成员` / `对象.方法 ()`
- 数组元素:`数组[下标]`(1-based)
- 内置常量可直接用于表达式:`“第一行” + #换行符 + “第二行”`

## 九、语句

| 语句 | 语法 | 示例 |
|------|------|------|
| 赋值 | `变量 = 表达式` | `总和 = 总和 + 1` |
| 连续赋值 | `连续赋值 (目标1, 目标2, ..., 值)` | `连续赋值 (a, b, 0)` |
| 调用 | `命令 (参数...)` | `标准输出 (0, “hi”)` |
| 成员调用 | `对象.命令 (参数...)` | `数据库.执行 (“SELECT *”)` |
| 注释 | `' 注释` | `' 说明` |
| 空语句 | — | — |

## 十、控制流(19 关键字完整规范)

### 10.1 条件

```
.如果 (条件表达式)
    真分支语句…
.否则                      ' 可选
    假分支语句…
.如果结束

.如果真 (条件表达式)         ' 无假分支
    语句…
.如果真结束                 ' 可省略
```

### 10.2 判断(switch,易语言特有)

```
.判断 (主表达式)              ' 主表达式只写一次
    .判断 (值1)
        语句…
    .判断 (值2)
        语句…
    .默认                    ' 可选,兜底
        语句…
.判断结束
```

**关键规则**:`判断 (值)` 是分支(与主表达式比较),不是嵌套判断;只有全不匹配才走 `.默认`。

### 10.3 循环(4 种)

```
' 计次循环:固定次数,循环变量 1→n
.计次循环首 (10, 次数变量)
    语句…
.计次循环尾

' 变量循环:起始/结束/步进(步进可为负,倒序)
.变量循环首 (10, 1, -1, 变量)
    语句…
.变量循环尾

' 判断循环:条件为真循环(while)
.判断循环首 (条件)
    语句…
.判断循环尾

' 循环判断:先执行后判断(do-while),条件在尾
.循环判断首 ()
    语句…
.循环判断尾 (条件)
```

### 10.4 跳转

```
跳出循环        ' 退出最近一层循环(不带点)
到循环尾        ' 跳到循环末尾继续下次迭代(不带点)
返回            ' 返回当前子程序(不带点);可带返回值:返回 (值)
结束            ' 结束整个程序(不带点)
```

### 10.5 配对规则

| 起始 | 结束 |
|------|------|
| `.如果` | `.如果结束` |
| `.如果真` | `.如果真结束`(可省) |
| `.判断` | `.判断结束` |
| `.判断循环首` | `.判断循环尾` |
| `.循环判断首` | `.循环判断尾` |
| `.计次循环首` | `.计次循环尾` |
| `.变量循环首` | `.变量循环尾` |

**校验规范**:控制流必须带点号(无点号校验报 `missing_dot` 错误);配对错误报 `unmatched_start/unmatched_end`。

## 十一、子程序

### 11.1 声明

```
.子程序 求最大公约数, 整数型, 公开, 欧几里得算法
    .参数 数一, 整数型
    .参数 数二, 整数型, 参考          ' 传址:可回写
    .局部变量 余数, 整数型
    循环判断首 ()
        余数 = 求余数 (数一, 数二)
        数一 = 数二
        数二 = 余数
    循环判断尾 (数二 ≠ 0)
    返回 (数一)
.子程序结束
```

- 语法:`.子程序 名[, 返回类型][, 公开|私有][, 说明]`
- 返回类型省略 = "无":`.子程序 处理数据` 或 `.子程序 处理数据, , 公开`
- **公开**:可被其他程序集调用;**私有**:仅本程序集

### 11.2 参数修饰符

| 修饰符 | 含义 |
|--------|------|
| `可空` | 调用时可省略该参数 |
| `参考` | 传址(引用传递,可回写调用方变量) |
| `传址` | 同参考 |
| `数组` | 参数为数组 |

参数组合示例:`.参数 数据, 整数型, 数组, 参考, 说明文字`

### 11.3 返回值

- `返回 (表达式)` 返回;无返回语句时返回类型默认值
- 子程序调用可作为表达式使用
- 返回"无"的子程序调用独立成语句

## 十二、类与对象

```
.类 形状
    成员 名称, 文本型                    ' 属性
    方法 面积, 小数型, 公开, 计算面积
        .参数 宽, 小数型
        .参数 高, 小数型
        返回 (宽 * 高)
    方法结束
.类结束

.类 圆形, 形状                          ' 继承:父类放第二位置
    方法 面积, 小数型                    ' 覆盖父类方法
        返回 (3.14159 * 半径 * 半径)
    方法结束
.类结束

.局部变量 圆, 圆形
圆.名称 = “我的圆”
标准输出 (0, 圆.面积 ())
```

| 元素 | 规则 |
|------|------|
| `.类 名[, 公开][, 说明]` | 类声明 |
| `成员 名, 类型` | 属性(字段),可带初值 |
| `.方法 名[, 返回类型][, 公开]` | 方法(行为);参数同子程序参数 |
| `.类 子类, 父类` | 继承 |
| `本对象` | 当前对象实例引用 |
| 调用 | `对象.属性` / `对象.方法 (参数)` |

## 十三、数据类型(结构体)

```
.数据类型 坐标
    成员 X, 整数型
    成员 Y, 整数型
    成员 标签, 文本型
.数据类型结束

.数据类型 矩形
    成员 左上角, 坐标                    ' 嵌套自定义类型
    成员 右下角, 坐标
.数据类型结束
```

- 成员类型可以是基本类型、数组、其他自定义类型
- 成员访问用 `.`:`矩形.左上角.X = 10`

## 十四、DLL 命令

```
.DLL命令 取系统时间, 长整数型, "kernel32.dll", "GetSystemTimeAsFileTime", 公开, 获取系统时间
    .参数 时间结构, 字节集, 传址
```

| 段 | 含义 |
|----|------|
| 1 | 命令名 |
| 2 | 返回类型(可省略) |
| 3 | `"DLL库文件名"` |
| 4 | `"原始函数名"`(DLL 中的真实导出名) |
| 5 | `公开`/`私有` |
| 6 | 说明 |

- 参数修饰符:`传址`(指针传参)、`数组`、`可空`

## 十五、核心库命令参考(系统核心支持库,42 类别)

> 以下按类别列出核心库全部命令(命令名即调用名;`对象.方法` 形式为对象方法调用)。
> 常用命令附签名。句柄参数为 0 时可省略:`标准输出 (, “x”)`。

### 15.1 流程控制(15)

```
判断 判断循环尾 判断循环首 到循环尾 变量循环尾 变量循环首 如果 如果真 循环判断尾 循环判断首 结束 计次循环尾 计次循环首 跳出循环 返回
```

### 15.2 文本操作(26)

```
UTF8到文本 倒找文本 分割文本 删全部空 删尾空 删首尾空 删首空 到全角 到半角 到大写 到小写 到文本 取代码 取文本中间 取文本右边 取文本左边 取文本长度 取空白文本 取重复文本 子文本替换 字符 寻找文本 指针到文本 文本到UTF8 文本替换 文本比较
```

| 常用命令 | 签名 |
|----------|------|
| `到文本 (值)` | 任意 → 文本 |
| `取文本长度 (文本)` | 长度 |
| `寻找文本 (文本, 子文本[, 起始位置])` | 1-based 位置,0=未找到 |
| `分割文本 (文本, 分隔符)` | → 文本型数组 |
| `取文本中间 (文本, 起始, 数量)` | 子串 |
| `取文本左边 (文本, 数量)` / `取文本右边` | 左右子串 |
| `文本替换 (文本, 起始, 数量, 替换文本)` | 替换 |
| `子文本替换 (文本, 被替换, 替换, [次数])` | 子串替换 |
| `到大写 (文本)` / `到小写` | 大小写 |
| `删首尾空 (文本)` | 去空白 |
| `字符 (整数)` | 代码 → 字符 |

### 15.3 数组操作(10)

```
删除成员 加入成员 取数组下标 取数组成员数 复制数组 插入成员 数组排序 数组清零 清除数组 重定义数组
```

| 常用命令 | 签名 |
|----------|------|
| `取数组成员数 (数组)` | 个数 |
| `加入成员 (数组, 值)` | 尾部追加(返回新数组) |
| `插入成员 (数组, 位置, 值)` | 1-based 插入 |
| `删除成员 (数组, 位置)` | 1-based 删除 |
| `数组排序 (数组[, 是否降序])` | 排序 |
| `重定义数组 (数组, 保留内容, 新大小...)` | 重定义 |
| `清除数组 (数组)` / `数组清零` | 清空 |

### 15.4 算术运算(23)

```
取整 取符号 取绝对值 取随机数 四舍五入 整除 是否运算正确 求余弦 求余数 求反对数 求反正切 求平方根 求次方 求正切 求正弦 求自然对数 相乘 相减 相加 相除 绝对取整 置随机数种子 负
```

| 常用命令 | 签名 |
|----------|------|
| `取绝对值 (数值)` | 绝对值 |
| `取整 (小数)` / `绝对取整` | 取整 |
| `取随机数 (最小值, 最大值)` | 随机整数(先 `置随机数种子 ()`) |
| `求余数 (被除数, 除数)` | 取余 |
| `四舍五入 (数值[, 小数位数])` | 四舍五入 |
| `求平方根 (数值)` / `求次方 (底, 次)` | 数学 |
| `相加 (a, b)` `相减` `相乘` `相除` `整除` | 运算函数形式 |
| `取符号 (数值)` | -1/0/1 |
| `置随机数种子 ([种子])` | 随机种子 |

### 15.5 数值转换(14)

```
二进制 到字节 到小数 到数值 到整数 到短整数 到长整数 十六进制 反转整数字节序 取八进制文本 取十六进制文本 数值到大写 数值到格式文本 数值到金额
```

| 常用命令 | 签名 |
|----------|------|
| `到整数 (值)` | 文本/小数 → 整数 |
| `到小数 (值)` / `到数值` | → 小数 |
| `到字节 (值)` / `到短整数` / `到长整数` | 各种数值转换 |
| `取十六进制文本 (数值)` | 十六进制显示 |
| `数值到大写 (数值)` | 中文大写金额 |

### 15.6 时间操作(18)

```
到时间 取分钟 取小时 取年份 取日 取日期 取时间 取时间部分 取时间间隔 取星期几 取月份 取某月天数 取现行时间 取秒 增减时间 指定时间 时间到文本 置现行时间
```

| 常用命令 | 签名 |
|----------|------|
| `取现行时间 ()` | 当前日期时间 |
| `取年份 (时间)` `取月份` `取日` `取小时` `取分钟` `取秒` `取星期几` | 分解 |
| `增减时间 (时间, 类型, 数量)` | 时间加减 |
| `取时间间隔 (时间1, 时间2, 类型)` | 间隔 |
| `时间到文本 (时间)` | 格式化 |

### 15.7 文件读写(25)

```
关闭所有文件 关闭文件 写出字节集 写出数据 写出文本 写文本行 删除数据 取文件长度 取读写位置 打开内存文件 打开加密文件 打开文件 插入字节集 插入文本 插入文本行 是否在文件尾 移到文件尾 移到文件首 移动读写位置 解锁文件 读入一行 读入字节集 读入数据 读入文本 锁住文件
```

| 常用命令 | 签名 |
|----------|------|
| `打开文件 (路径, 读写方式...)` | 打开返回文件号 |
| `读入一行 (文件号)` / `读入文本` / `读入字节集` | 读取 |
| `写出文本 (文件号, 内容)` / `写出字节集` | 写入 |
| `关闭文件 (文件号)` / `关闭所有文件 ()` | 关闭 |

### 15.8 字节集操作(19)

```
倒找字节集 分割字节集 到字节集 取字节集中间 取字节集内整数 取字节集右边 取字节集左边 取字节集数据 取字节集长度 取空白字节集 取重复字节集 子字节集替换 字节集替换 寻找字节集 指针到双精度小数 指针到字节集 指针到小数 指针到整数 置字节集内整数
```

| 常用命令 | 签名 |
|----------|------|
| `到字节集 (文本)` / `指针到文本` | 文本 ↔ 字节集 |
| `取字节集长度 (字节集)` | 长度 |
| `寻找字节集 (字节集, 目标)` | 查找 |
| `取字节集内整数 (字节集, 位置)` / `置字节集内整数` | 整数存取 |

### 15.9 逻辑比较(10)

```
不等于 取反 大于 大于或等于 小于 小于或等于 并且 或者 等于 近似等于
```

(中文比较运算符,等价于 `<>` `!` `>` `>=` `<` `<=` `and` `or` `=` `≈`)

### 15.10 位运算(8)

```
位与 位取反 位异或 位或 右移 合并整数 合并短整数 左移
```

| 常用命令 | 签名 |
|----------|------|
| `位与 (数1, 数2)` `位或` `位异或` `位取反` | 位运算 |
| `左移 (数, 位数)` `右移` | 移位 |
| `合并整数 (高16, 低16)` | 合并 |

### 15.11 系统处理(40)

```
交换变量 信息框 写注册项 写配置项 删除注册项 剪辑板中可有文本 取剪辑板文本 取启动时间 取字节集注册项 取屏幕宽度 取屏幕高度 取操作系统类别 取操作系统类别2 取数值注册项 取文本注册项 取最后错误 取程序名称 取统一文本 取统一文本长度 取运行时数据类型 取配置节名 取颜色数 取默认底色 取鼠标垂直位置 取鼠标水平位置 多文件对话框 宏 延时 强制交换变量 快照 恢复鼠标 注册项是否存在 清除剪辑板 类自身 置剪辑板文本 置等待鼠标 读配置项 输入框 运行 鸣叫
```

| 常用命令 | 签名 |
|----------|------|
| `信息框 (内容[, 按钮类型])` | 弹窗 |
| `输入框 (提示文本[, 默认值])` | 输入对话框 |
| `运行 (命令行[, 方式])` | 运行程序 |
| `延时 (毫秒)` | 延时(伪执行假设真) |
| `取屏幕宽度 ()` / `取屏幕高度 ()` | 屏幕尺寸 |
| `取剪辑板文本 ()` / `置剪辑板文本 (文本)` | 剪贴板 |
| `读配置项 (文件, 节, 项, 默认)` / `写配置项` | 配置文件 INI |
| `交换变量 (a, b)` | 交换两个变量 |

### 15.12 程序调试(4)

```
是否为调试版 暂停 检查 输出调试文本
```

| 常用命令 | 签名 |
|----------|------|
| `输出调试文本 (内容...)` | 调试输出 |
| `暂停 ()` | 暂停执行 |

### 15.13 控制台操作(2)

| 常用命令 | 签名 |
|----------|------|
| `标准输出 (句柄, 内容)` | 输出到标准输出(0=标准输出句柄) |
| `标准输入 ()` | 从标准输入读一行 |

### 15.14 磁盘操作(22)

```
删除文件 取磁盘卷标 取磁盘剩余空间 取磁盘总空间 取文件属性 取文件时间 取文件大小 取文件路径 取文件名称 取文件扩展名 取文件所在目录 复制文件 建立目录 移动文件 置文件属性 置文件时间 置当前目录 删除目录 取当前目录 取驱动器 打开磁盘文件 磁盘数据
```

### 15.15 环境存取(5)

```
写环境变量 取命令行 取执行文件名 取运行目录 读环境变量
```

### 15.16 网络通信(4)

```
取主机名 转换为IP地址 转换为主机名 通信测试
```

### 15.17 变量操作(2)

```
赋值 连续赋值
```

### 15.18 数据库(81)+ 数据源(70)+ 外部数据库(16)

- 数据库:`打开数据库` `执行SQL` `读字段值` `写字段值` `关闭数据库` 等(81 个)
- 数据源:`取记录数` `到下一记录` `首记录` `尾记录` 等(70 个,多为 `对象.` 方法形式)
- 外部数据库:`对象.打开MDB数据库` `对象.执行` `对象.查询` `对象.读` 等(16 个)

### 15.19 窗口组件类命令(窗口 23 / 画板 28 / 组合框 12 / 表格 12 / 打印机 10 / 列表框 6 / 媒体播放 8 / 拼音 7 / 易包 5 / 选择夹 3 / 端口 3 / 客户 2 / 服务器 2 / 数据报 2)

- 窗口:`取窗口句柄` `取窗口标题` `置窗口标题` `移动窗口` 等
- 组件命令多为 `对象.方法` 形式(见第十七章组件模型)
- 媒体:`播放` `停止` `暂停` 等
- 拼音:`取拼音` `取拼音首字母` 等

## 十六、精易模块常用命令(精选)

> 精易模块(精易模块源码语料 4820 条)提供大量实用扩展命令,命名前缀 `系统_` `网页_` `文本_` `窗口_` `进程_` `线程_` `数组_` 等。

| 前缀 | 示例 | 说明 |
|------|------|------|
| `系统_` | `系统_转换为IP地址` `系统_取系统信息` | 系统功能 |
| `网页_` | `网页_取文本` `网页_访问` | 网页操作 |
| `窗口_` | `窗口_取句柄` `窗口_枚举` | 窗口操作 |
| `进程_` | `进程_取进程ID` `进程_结束` | 进程管理 |
| `线程_` | `线程_打开` `线程_创建` | 线程操作 |
| `文本_` | `文本_取中间` `文本_替换` | 文本处理 |
| `数组_` | `数组_去重复` `数组_排序` | 数组处理 |

## 十七、窗口与组件模型

### 17.1 窗口程序结构

```
.版本 2
.程序集 窗口程序集_启动窗口
.程序集变量 计数, 整数型

.子程序 __启动窗口_创建完毕
    标准输出 (0, “窗口已创建”)
.子程序结束
```

- 事件子程序命名:`__启动窗口_创建完毕`、`__启动窗口_将被销毁`
- 组件事件:`__按钮1_被单击` 等(组件名_事件名)

### 17.2 组件模型要点

- 组件属性:`组件.属性 = 值`(`标签1.标题 = “文本”`)
- 组件方法:`组件.方法 (参数)`
- 特殊对象:`本对象`(当前窗口/组件)、`本组件`、`本子程序`
- 组件寻找:`寻找组件` `取所找到组件` `取找到组件数目` `清除组件寻找句柄`
- 动态创建:`复制窗口组件` `载入 (窗口, , 真)`

## 十八、编码规范与最佳实践

1. **控制流必须带点号**:`.如果`/`.计次循环首`(校验强制)
2. **变量先声明后使用**:所有变量用 `.局部变量`/`.全局变量`/`.程序集变量` 声明
3. **数组 1-based**:循环访问从 1 开始
4. **字符串全角引号**:`“...”` 为规范写法
5. **字符串拼接用 `+`**:`“前缀” + 变量 + “后缀”`
6. **逻辑值用 `真`/`假`**,不是 True/False
7. **子程序命名**:动词开头(`取`/`置`/`写`/`读`/`求`/`创建`),语义清晰
8. **参数修饰符**:需要回写的参数用 `参考`/`传址`
9. **子程序说明**:声明行尾写说明(`' 说明` 或第 4 段),便于文档提取
10. **常量命名**:全大写或语义化(`_WIN32_WINNT_VISTA` 风格)
11. **递归注意**:易语言默认栈空间有限,深递归慎用
12. **错误处理**:核心库命令失败通常返回默认值,用 `是否为空`/`取最后错误` 判断

## 十九、常见错误与调试

| 错误 | 原因 | 修复 |
|------|------|------|
| 控制流缺点号 | `如果` 写成了命令调用 | 改为 `.如果` |
| 数组下标越界 | 从 0 开始数 | 1-based:`数组[1]` 起 |
| 变量未声明 | 直接使用变量 | 先 `.局部变量` 声明 |
| 类型不匹配 | 文本赋值给整数 | 用 `到整数 (文本)` 转换 |
| 配对缺失 | `.如果` 无 `.如果结束` | 补全配对 |
| 返回类型不符 | 有返回类型无 `返回` | 补 `返回 (值)` |

调试手段:
- `输出调试文本 (变量)` 查看变量值
- `标准输出 (0, 内容)` 控制台输出
- `信息框 (内容)` 弹窗
- `暂停 ()` 断点

## 二十、AI 编写易语言代码检查清单

- [ ] `.版本 2` 开头,`.程序集` 存在
- [ ] **控制流全部带点号**(`.如果`/`.计次循环首`/`.判断`;`返回`/`结束`/`跳出循环` 不带点)
- [ ] 所有变量先声明(`.局部变量`/`.全局变量`/`.程序集变量`)
- [ ] 数组下标从 1 开始
- [ ] `判断` 用 switch 语义(主表达式一次 + `.判断 (值)` 分支 + `.默认` 兜底)
- [ ] 字符串用全角引号,拼接用 `+`
- [ ] 有返回类型的子程序确保 `返回 (值)`
- [ ] 循环/判断配对完整(`.如果` ↔ `.如果结束` 等)
- [ ] 参数修饰符正确(`可空`/`参考`/`传址`/`数组`)
- [ ] 逻辑值用 `真`/`假`
- [ ] 核心库命令名与参数顺序正确(见第十五章)
- [ ] 子程序/方法声明行尾写说明,便于文档化

---

*本规范基于系统核心支持库 5.7 手册与易语言官方语法整理,命令清单与命令库(state.db,7831 条)同步。*

结帖率:100% (49/49)

签到天数: 7 天

发表于 6 小时前 | 显示全部楼层   广东省东莞市
那不完了,按这套规范做完,领取一份吴涛的法院传票
回复 支持 反对

使用道具 举报

签到天数: 8 天

发表于 6 小时前 | 显示全部楼层   湖北省武汉市
一个没落的语言只能淘汰了。
回复 支持 反对

使用道具 举报

签到天数: 8 天

发表于 6 小时前 | 显示全部楼层   湖北省武汉市
很难实现的。
回复 支持 反对

使用道具 举报

签到天数: 8 天

发表于 6 小时前 | 显示全部楼层   湖北省武汉市
不现实吧 ,  现在已经很少有人用易语言了。
回复 支持 反对

使用道具 举报

签到天数: 8 天

发表于 11 小时前 | 显示全部楼层   贵州省黔东南苗族侗族自治州
本帖最后由 awuming 于 2026-8-9 02:50 编辑

https://github.com/aiqinxuancai/AutoLinker
https://github.com/aiqinxuancai/e-language-skill
建议去用里面的规范
回复 支持 反对

使用道具 举报

结帖率:100% (21/21)

签到天数: 7 天

发表于 昨天 20:14 | 显示全部楼层   安徽省安庆市
不现实吧   现在已经是尾声了。没人会在意这些
回复 支持 反对

使用道具 举报

结帖率:100% (2/2)

签到天数: 3 天

 楼主| 发表于 昨天 19:33 | 显示全部楼层   河南省焦作市
zzh233 发表于 2026-8-8 18:37
这个想法是好的 但是易语言天生就是 单兵作战的 自己看得懂就可以 主打随心所欲地 如果是多人协作的就需要 ...

哎,没有办法啊
回复 支持 反对

使用道具 举报

结帖率:94% (204/217)

签到天数: 9 天

发表于 昨天 18:37 | 显示全部楼层   安徽省芜湖市
这个想法是好的 但是易语言天生就是 单兵作战的 自己看得懂就可以 主打随心所欲地 如果是多人协作的就需要约定俗成
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备2025452707号) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表