返回列表

帖子详情

经验分享

Y++ 支持库命令语法说明

作者:管理员发布:2026-08-11 01:48:03浏览:0
# Y++ 支持库命令语法说明

本文说明 Y++ 中支持库命令、支持库类、回调、返回值、可选参数和组合调用的写法。具体命令是否存在、参数类型及所属支持库,以 IDE 输入补全和光标处 F1 帮助为准。

## 1. 普通命令调用

基本格式:

```yc
命令名(参数1, 参数2)
```

无参数命令也要写括号:

```yc
文本 运行目录 = 系统_取运行目录()
整数 鼠标X = 取鼠标X()
整数 鼠标Y = 取鼠标Y()
```

有返回值时可直接赋给同类型变量,也可放进表达式:

```yc
整数 数量 = 数组长度(文件列表)
文本 配置路径 = 系统_取运行目录() + "\\config\\app.json"

如果 (文件是否存在(配置路径)) {
    输出("配置文件存在")
}
```

不关心返回值时可以直接调用:

```yc
输出("程序开始")
移动鼠标(100, 200)
延时(300)
```

## 2. 参数写法

### 2.1 字面量、变量和表达式

```yc
输出("固定文本")

文本 用户名 = "张三"
输出(用户名)

整数 宽 = 800
整数 高 = 600
输出("面积=" + 到文本(宽 * 高))
```

字符串使用双引号。Windows 路径中的反斜杠写成 `\\`

```yc
文本 文件 = "D:\\data\\users.json"
```

也可以使用 `/`

```yc
文本 文件 = "D:/data/users.json"
```

### 2.2 可选参数

帮助中使用方括号标出的参数可以省略。例如帮助若显示:

```text
某命令(文本 内容, [整数 超时=3000], [逻辑 显示详情=假])
```

可按顺序调用:

```yc
某命令("测试")
某命令("测试", 5000)
某命令("测试", 5000, 真)
```

不能跳过中间参数只填写最后一个参数,除非该命令帮助明确支持其它写法。

### 2.3 类型转换

参数类型不一致时先显式转换:

```yc
文本 数量文字 = "128"
整数 数量 = 到整数(数量文字)
输出("数量=" + 到文本(数量))
```

不要依赖文本、整数、逻辑之间的隐式转换。

## 3. 支持库类和对象方法

支持库中带“类”的功能通常先声明对象,再用点号调用方法:

```yc
JSON类 文档
HTTP类 请求器
SQLite类 数据库
```

方法格式:

```yc
对象.方法(参数)
```

属性格式:

```yc
对象.属性
对象.属性 = 值
```

示例一:JSON 类组合调用:

```yc
函数 生成用户JSON() 文本 {
    JSON类 根
    根.置文本("姓名", "张三")
    根.置整数("年龄", 28)
    根.置逻辑("启用", 真)
    返回(根.到文本())
}
```

示例二:对象之间传递结果:

```yc
函数 保存配置() {
    JSON类 配置
    配置.置文本("服务器", "127.0.0.1")
    配置.置整数("端口", 8080)

    文本 内容 = 配置.到文本()
    写文件(系统_取运行目录() + "\\config.json", 内容)
}
```

示例三:读取对象属性和事件属性:

```yc
MQTT类 客户端

函数 收到消息() {
    输出("主题:" + 客户端.事件主题)
    输出("正文:" + 客户端.事件文本)
}

函数 主窗口.创建完毕() {
    客户端.消息到达(&收到消息)
    客户端.连接("127.0.0.1", 1883, "YPPClient")
    客户端.启动事件循环(20)
}
```

## 4. 回调函数和函数地址

支持库要求回调时,一般传 `&函数名`

```yc
函数 下载完成() {
    输出("下载完成")
}

函数 开始下载() {
    下载器.完成(&下载完成)
}
```

回调形参必须与命令帮助一致。帮助要求零参数回调时不要自行增加参数;事件数据通常从对象的 `事件文本``事件字节集``错误信息` 等属性读取。

```yc
串口类 串口

函数 串口收到数据() {
    字节集 数据 = 串口.事件字节集
    输出("收到字节数=" + 到文本(字节集长度(数据)))
}
```

一个回调可登记到对象,多个对象应分别读取各自的事件属性:

```yc
MQTT类 生产连接
MQTT类 测试连接

函数 生产消息() {
    输出("生产:" + 生产连接.事件文本)
}

函数 测试消息() {
    输出("测试:" + 测试连接.事件文本)
}
```

## 5. 数组作为参数和返回值

```yc
数组 文件列表[] = 取文件列表("D:/data", "*.*", 假, 真)
整数 i = 0
循环 (数组长度(文件列表), i) {
    输出(文件列表[i])
}
```

向动态数组添加数据:

```yc
文本 名称[] = []
数组添加(名称, "张三")
数组添加(名称, "李四")
输出(名称[0])
```

二维、三维数组或自定义类型数组是否适用于某个命令,要按该命令的参数类型使用,不能看到“数组”就传任意元素类型。

## 6. 命令嵌套与拆分

简单返回值可以嵌套:

```yc
输出(到文本(数组长度(文件列表)))
```

涉及网络、文件、数据库或多步状态时建议拆开,便于检查失败位置:

```yc
文本 路径 = 系统_取运行目录() + "\\data.json"
逻辑 存在 = 文件是否存在(路径)
如果 (!存在) {
    输出("文件不存在:" + 路径)
    返回()
}

文本 内容 = 读文件(路径)
如果 (内容 == "") {
    输出("文件为空或读取失败")
    返回()
}
输出(内容)
```

## 7. 条件、循环和错误处理中的命令

```yc
函数 查找名称(文本 名称列表[], 文本 目标) 整数 {
    整数 i = 0
    循环 (数组长度(名称列表), i) {
        如果 (名称列表[i] == 目标) {
            返回(i)
        }
    }
    返回(-1)
}
```

```yc
函数 安全读取(文本 路径) 文本 {
    尝试 {
        返回(读文件(路径))
    } 捕获 {
        输出("读取失败:" + 路径)
        返回("")
    }
}
```

## 8. 多线程中调用支持库

耗时的文件、网络和计算可放到线程或线程池;窗口组件属性不要在后台线程直接修改,应回到界面事件或使用支持库提供的界面调度方式。

```yc
函数 后台任务() {
    文本 内容 = 读文件("D:/data/big.json")
    输出("后台读取完成,字符数=" + 到文本(文本长度(内容)))
}

函数 开始按钮.单击(整数 X, 整数 Y) {
    整数 线程句柄 = 启动线程(&后台任务)
    如果 (线程句柄 == 0) {
        输出("线程启动失败")
    }
}
```

## 9. 常量与支持库命令

支持库内置常量通常以 `#` 开头:

```yc
如果 (按键 == #回车键) {
    输出("按下回车")
}

模拟鼠标点击(#鼠标左键, 100, 200)
```

常量不是函数,不要在后面加括号。

## 10. 错误写法与正确写法

### 错误:无参数命令漏括号

```yc
// 错误
文本 路径 = 系统_取运行目录

// 正确
文本 路径 = 系统_取运行目录()
```

### 错误:把普通命令当对象方法

```yc
// 错误:输出不是“系统”对象的方法
系统.输出("你好")

// 正确
输出("你好")
```

### 错误:把类方法当普通命令

```yc
JSON类 数据

// 错误
置文本("姓名", "张三")

// 正确
数据.置文本("姓名", "张三")
```

### 错误:回调漏写 `&`

```yc
// 错误:这会立即调用函数,或产生参数类型错误
客户端.消息到达(收到消息())

// 正确:传函数地址
客户端.消息到达(&收到消息)
```

### 错误:自行改变回调参数

```yc
// 帮助要求零参数时,以下写法错误
函数 收到消息(文本 主题, 文本 内容) { }

// 正确
函数 收到消息() {
    输出(客户端.事件主题)
    输出(客户端.事件文本)
}
```

### 错误:返回类型不匹配

```yc
// 错误
整数 数量 = "10"

// 正确
整数 数量 = 到整数("10")
```

### 错误:将支持库常量写成函数

```yc
// 错误
整数 键 = #回车键()

// 正确
整数 键 = #回车键
```

### 错误:使用不存在的重载

```yc
// 错误:根据其它语言经验随意添加参数
移动鼠标(100, 200, 500, "平滑")

// 正确:只按 IDE 参数提示调用
移动鼠标(100, 200)
```

## 11. 排查顺序

1. 输入命令名后查看补全,确认支持库已经加载。
2. 将光标放在命令或方法上按 F1,确认参数数量、类型、返回值和示例。
3. 类方法必须由正确类型的对象通过点号调用。
4. 回调必须核对函数参数,并使用 `&函数名`
5. 同名命令冲突时删除重复 `.ypi` 声明,或给 API 使用不同中文别名。

评论