把中文,写成程序。
从第一句「说」到模块、文件和 JSON。每一章都配上写法、解释与示例,遇到问题也能按章节查回来。
没有匹配的章节。试试更短的词,例如「列表」「输入」或「类型」。
第一段空灵程序
空灵使用中文表达常见的编程操作。程序保存在 UTF-8 编码的 .灵 文件中,从上到下执行。先跟着小林写一个能运行的小程序,再逐步添加判断和循环。
语言 空灵 3
全局 名字是“小林”
说“你好,” + 名字
说“欢迎来到空灵。”你好,小林 欢迎来到空灵。
- 「语言 空灵 3」明确选择本手册使用的自然中文语法。
- 「全局 名字是“小林”」创建一个保存文本的变量。
- 「说」输出内容并换行;文本之间用 + 连接。
- 把代码保存为「你好.灵」,在 IDE 中打开并运行。网页上的代码块不会自动执行程序。
保存、编译与运行
初次使用建议从 IDE 运行代码。Windows 下载的是完整 ZIP 套件:解压到简短英文目录,再双击 Kongling.cmd。Java、编译器、标准库和 MinGW 一起提供,不要只复制其中一个 exe。
命令行中的 kl 是编译器。只有把它所在目录加入 PATH 后,才能直接使用短命令;否则需要写完整路径。下面的相对路径以终端当前工作目录为起点。
kl --version
kl c 你好.灵
kl c -r 你好.灵- kl --version
- 查看编译器版本。
- kl c 文件.灵
- 编译源文件,生成当前目标平台的可执行程序。
- kl c -r 文件.灵
- 编译成功后立即运行。
- kl c --out:程序 文件.灵
- 指定输出文件;Windows 通常使用 .exe 扩展名。
Windows PowerShell 中,带空格的路径要加引号,调用完整路径的程序时使用 &。下面示例假设终端已经进入解压后的套件根目录。
& '.\platform\buildSNAPSHOT\compile\kl\bin\kl.exe' c -r '.\你好.灵'标点、注释与代码块
推荐每行写一个语句,用一致的缩进表示层次。方法、条件和循环等结构使用「结束」收尾;示例统一使用两个空格缩进,不要把 Tab 与空格混在一起。
语言 空灵 3
注:这一行是说明,不会执行。
# 这一行也是注释。
全局 分数是88
要 分数 大于等于 60 就
说“通过”
结束通过
- 中文引号 “内容” / 英文引号 "内容"
- 用于文本。不要把变量名称放进引号。
- (甲,乙) / (甲, 乙)
- 用于方法调用与参数。
- 【1,2】 / [1, 2]
- 用于列表和下标。
- : / :
- 用于类型标注、方法头和记录字段。
- 注:内容 / # 内容
- 用于注释。代码中的说明不会变成程序输出。
字符串中的标点和关键字属于文字内容,不会被当作语法。英文双引号字符串内部可以使用 \" 表示引号、\n 表示换行。
说 "小林说:\"你好\""
说 "第一行\n第二行"小林说:"你好" 第一行 第二行
变量与固定值
变量保存会变化的数据,固定值保存声明后不再赋值的数据。名称可以使用中文;取名应表达用途,例如「成绩」「总和」「是否通过」,避免用数字开头或直接使用语法关键字。
全局 名字是“小林”
全局 成绩是80
固定 及格线是60
成绩改为88
说 名字 + “的成绩:” + 成绩
必须 成绩 大于等于 及格线小林的成绩:88
- 全局 名称是值
- 明确声明变量。跨模块共享还需要「公开」,并非所有模块自动可见。
- 固定 名称是值
- 声明固定绑定;之后不能用「改为」或「听」修改。
- 局部 名称是值
- 在方法或当前局部结构内声明变量。
- 名称改为新值
- 修改已经声明的可变对象;未声明、固定或类型不匹配会报错。
- 名称是值
- 简写形式:可用于声明,也可修改已存在的可变对象。较长程序推荐明确写「全局 / 局部」和「改为」。
类型与类型标注
空灵会根据值推断类型,也允许用「名称:类型是值」明确声明。类型标注尤其适合空列表、模块接口和复杂记录,能更早发现数据不一致。
全局 年龄:整数是21
全局 单价:浮点是3.5
全局 姓名:文本是“小林”
全局 已通过:真假是真
全局 分数们:整数列表是[88,92]
全局 待登记:文本列表是[]
说 姓名 + “,年龄:” + 年龄
说 “记录数量:” + 列表长度(分数们)小林,年龄:21 记录数量:2
- 整数
- 普通整数,位宽依目标平台而定。
- 浮点(兼容名称:小数)
- 用于小数运算,例如 3.5。
- 文本
- 保存字符串。
- 真假(兼容名称:布尔)
- 只表示「真」或「假」,不是任意数字。
- 整数列表 / 文本列表 / 列表(类型)
- 元素类型一致的可变长度列表。
- JSON / 记录名称 / 数据表(键类型,值类型)
- 结构化数据类型,见后续章节。
- 可空类型
- 值可能不存在,需要先检查再取值。
输出、输入与文本拼接
「说」输出一个表达式并换行。文本与数字拼接时可以使用 +;它与纯数字相加的含义不同。括号可以明确先计算数字再拼接。
全局 数量是3
说 “小林买了” + 数量 + “本书”
说 “合计:” + (2 + 3)
说 “已完成:” + 真小林买了3本书 合计:5 已完成:真
「听 名称」从标准输入读取一行文本。目标必须是可以修改的文本或可空文本,不能直接把输入读进整数变量。需要数字时,再显式转换。
全局 输入内容:文本是“”
听 输入内容
说 “你好,” + 输入内容你好,小林
数字、运算与转换
常用算术运算符是 +、-、*、/ 和 %。「余数」是 % 的自然中文写法。使用括号表达希望先算的部分,避免仅靠读文字猜优先级。
全局 单价是12
全局 数量是3
说 单价 * 数量
说 (10 + 2) * 3
说 10 % 3
说 10 余数 3
说 5 / 236 36 1 1 2.5
数字字面量可以使用十进制、0x 前缀的十六进制、0b 前缀的二进制、0o 前缀的八进制。代码中的进制字面量与「文本转整数」是两件事。
全局 十六进制是0x10
全局 二进制是0b1010
全局 八进制是0o10
说 十六进制
说 二进制
说 八进制16 10 8
全局 数量是文本转整数(“ 12 ”)
全局 单价是文本转浮点(“3.5”)
说 “数量:” + 数量
说 “单价:” + 单价
说 转为文本(真)数量:12 单价:3.5 真
整数变量与浮点变量不能直接混算。需要小数计算时,让参与运算的变量使用一致的浮点类型;不要假定编译器会自动把整数变量转成浮点数。
- 文本转整数(文本)
- 读取完整十进制整数,忽略首尾空白;空文本、杂字和超范围值会报错。
- 文本转浮点(文本)
- 读取完整浮点数;拒绝空内容、尾随杂字以及 NaN、Inf 等非有限值。
- 转为文本(值)
- 把支持的数字或真假值转为文本;真假值转为「真 / 假」。
- 转为整数 / 转为字节 / 转为16位整数…
- 用于相应整数类型之间的显式转换,检查目标范围。不要把它们当成任意浮点数取整接口。
比较与逻辑
比较产生真假值。条件必须能判断为真假,不能把一个普通数字当作条件。多个条件使用「并且」「或者」连接,「非」表示取反。
- 相等 / 等于 / ==
- 两个值相等。
- 不相等 / 不等于 / !=
- 两个值不同。
- 大于 / >;小于 / <
- 严格比较大小。
- 大于等于 / 不小于 / >=
- 左边不低于右边。
- 小于等于 / 不大于 / <=
- 左边不高于右边。
- 并且 / 而且;或者;非
- 逻辑与、逻辑或、逻辑非。
全局 成绩是88
全局 已缺考是假
要 (成绩 不小于 60) 并且 (成绩 不大于 100) 并且 非(已缺考) 就
说“成绩有效且及格”
结束成绩有效且及格
「并且」在左侧为假时不再求右侧;「或者」在左侧为真时不再求右侧。安全读取可空值时可以利用这个规则,但复杂表达式建议先拆成变量和分支。
回到文档开头条件分支
「要 条件 就」开始一个分支;「否则要」继续判断下一个条件;「否则」处理所有前面条件都不成立的情况。整个分支链最后写一个「结束」。
全局 成绩是88
要 成绩 大于等于 90 就
说“优秀”
否则要 成绩 大于等于 60 就
说“及格”
否则
说“继续努力”
结束及格
同一条链只执行第一个成立的分支。把 ≥90 放在 ≥60 前面,否则高分会提前落入及格分支。只有一句输出时可以使用行内写法。
全局 成绩是100
要 成绩 大于等于 100,就说“满分”满分
循环与提前结束
空灵提供范围遍历、列表遍历、固定次数重复和条件循环。范围循环的「从 起点 到 终点」包含两端;以下示例依次处理 1、2、3。
全局 总和是0
每个 当前值 从 1 到 3,做
总和改为总和 + 当前值
结束
说 总和6
全局 水果们是[“苹果”,“香蕉”,“橙子”]
每个 水果 在 水果们 里,做
说 水果
结束苹果 香蕉 橙子
重复 2 次,做
说“开始练习”
结束
全局 计数是0
当 计数 小于 3 时
说 计数
计数改为计数 + 1
结束开始练习 开始练习 0 1 2
每个 数字 从 1 到 6,做
要 数字 相等 3 就
继续
结束
要 数字 相等 5 就
跳出
结束
说 数字
结束1 2 4
- 继续
- 跳过本次剩余语句,进入下一轮。
- 跳出
- 退出当前循环。旧写法「中断」仍有兼容处理,新代码推荐「跳出」。
- 当 条件 时
- 每一轮执行前检查条件;循环体必须让条件有机会变为假,或主动跳出。
方法、参数与返回值
方法把一段操作命名,方便多次调用。自定义方法名必须以「法」结尾,例如「相加法」。方法头由名称、参数括号和冒号组成,方法体最后使用「结束」。调用时必须写括号,没有参数也写空括号;内置操作使用文档列出的固定名称。
相加法(甲:整数,乙:整数)返回整数:
返回 甲 + 乙
结束
全局 结果是相加法(3,5)
说 结果8
问候法(名字:文本):
说“你好,” + 名字
结束
问候法(“小林”)你好,小林
「返回」立刻结束当前方法,并把值交给调用方。有结果的方法要让所有正常执行路径都返回兼容类型的值。省略参数或返回类型时可以进行推断,但模块对外接口推荐写全。
评价法(成绩:整数)返回文本:
要 成绩 大于等于 60 就
返回“及格”
否则
返回“继续努力”
结束
结束
说 评价法(88)及格
作用域与命名
作用域决定一个名称在哪里可见。方法参数和「局部」变量用于当前方法;内部声明可以遮蔽外层同名变量。离开作用域后,不应再访问里面的局部名称。
全局 名字是“小林”
展示法():
局部 名字是“访客”
说 名字
结束
展示法()
说 名字访客 小林
- 同名变量容易误读;除非确实需要遮蔽,优先给局部数据更具体的名称。
- 「固定」限制重新赋值,不等同于把对象及其全部引用永久冻结;引用记录的共享语义见后文。
- 「公开」解决模块边界的可见性,不代替参数、返回值或类型定义。
列表与下标
列表保存一组同类型的数据。第一个元素的下标是 0,最后一个是长度减 1。读取或修改前,确保下标没有越界。
全局 数字们:整数列表是[10,20]
添加到列表(数字们,30)
数字们[0]改为15
移除列表项(数字们,1)
说 列表长度(数字们)
每个 数字 在 数字们 里,做
说 数字
结束2 15 30
- 列表长度(列表)
- 返回元素个数。
- 添加到列表(列表,元素)
- 在末尾加入一个类型兼容的元素;修改原列表。
- 移除列表项(列表,下标)
- 删除指定位置,其后元素向前移动;下标必须有效。
- 列表[下标] / 列表【下标】
- 读取指定元素,也可以作为「改为」的目标。
文本处理
文本不仅可以拼接,还可以检查、整理、替换和拆分。拆分结果是文本列表,连接操作把文本列表重新组合为一个文本。
全局 原文是“ 小林,小禾 ”
全局 整理后是去掉首尾空白(原文)
全局 名字们是拆分文本(整理后,“,”)
说 连接文本(名字们,“ / ”)
说 替换文本(整理后,“小禾”,“小雨”)
要 文本包含(原文,“小林”) 就
说“找到了”
结束小林 / 小禾 小林,小雨 找到了
说 文本长度(“你好😊”)3
- 文本长度(文本)
- 计算 Unicode 码点数;例如「你好😊」是 3。组合字符、家庭 emoji 等显示成一个图形时可能包含多个码点。
- 文本包含(原文,片段)
- 检查是否含有指定片段,返回真假。
- 去掉首尾空白(文本)
- 移除首尾空白,保留中间内容。
- 替换文本(原文,旧片段,新片段)
- 返回替换后的文本。
- 拆分文本(原文,分隔文本)
- 按指定分隔文本拆为文本列表。
- 连接文本(文本列表,分隔文本)
- 把元素按分隔文本拼接。
记录与自定义类型
记录把一组有名称的字段放在一起,例如一个人的姓名和年龄。直接用大括号可以创建匿名记录;需要在方法、列表或模块间复用时,先声明命名记录类型。
全局 用户是{
姓名:“小林”
年龄:21
}
用户.年龄改为22
说 用户.姓名 + “,年龄:” + 用户.年龄小林,年龄:22
记录 用户资料:
姓名:文本
年龄:整数
标签们:文本列表
结束
全局 用户:用户资料是{
姓名:“小林”
年龄:21
标签们:[“学生”,“开发者”]
}
说 用户.姓名
说 列表长度(用户.标签们)小林 2
可空值与安全取值
「没有」表示值不存在,不是空文本、数字 0 或「假」。把类型写成「可空文本」「可空整数」等,才能接收不存在的情况。
全局 昵称:可空文本是没有
昵称改为“小林”
要 有值(昵称) 就
说 取值(昵称)
否则
说“访客”
结束小林
- 有值(可空变量)
- 检查当前是否保存着值。
- 取值(可空变量)
- 提取内部值;先在可证明有值的路径中检查。
- 可空整数列表
- 整个整数列表可不存在。
- 列表(可空整数)
- 列表存在,但每个元素可以是整数或「没有」。
全局 昵称们:列表(可空文本)是[“小林”,没有]
每个 昵称 在 昵称们 里,做
要 有值(昵称) 就
说 取值(昵称)
否则
说“未填写”
结束
结束小林 未填写
数据表与有序数据表
数据表根据键保存和查找值。例如「数据表(文本,整数)」可以用姓名查成绩。创建空表需要明确键和值的类型。
全局 成绩表:数据表(文本,整数)是空表
成绩表[“小林”]改为95
成绩表[“小禾”]改为88
全局 查找结果是按键查找(成绩表,“小林”)
要 有值(查找结果) 就
说 取值(查找结果)
结束95
- 表[键]改为值
- 写入或更新指定键。键和值必须符合类型。
- 有键(表,键)
- 检查键是否存在。
- 按键查找(表,键)
- 安全读取,返回可空值;缺键时得到「没有」。
- 所有键(表) / 所有值(表)
- 分别遍历键或值。需要键值对应关系时,可遍历键再按键查找,如下例。
全局 成绩表:有序数据表(文本,整数)是{
“小林”:95
“小禾”:88
}
每个 名字 在 所有键(成绩表)里,做
局部 分数是按键查找(成绩表,名字)
要 有值(分数) 就
说 名字 + “:” + 取值(分数)
结束
结束小林:95 小禾:88
引用记录
普通记录适合描述数据值。引用记录保存对象引用,多个变量可能指向同一个对象,修改它时要留意共享影响。它也可以表达链表这类相互引用的结构。
引用记录 节点:
值:整数
下一个:可空节点
结束
全局 尾节点:节点是{
值:2
下一个:没有
}
全局 头节点:节点是{
值:1
下一个:尾节点
}
要 有值(头节点.下一个) 就
说 取值(头节点.下一个).值
结束2
多文件模块与公开声明
程序变大后,可以把相关方法放进独立的 .灵 文件。使用「导入 模块名」引用同目录模块。只有明确公开的声明才作为模块接口提供给外部代码。
公开 固定 模块名称是“计算工具”
公开 相加法(甲:整数,乙:整数)返回整数:
返回 甲 + 乙
结束导入 计算工具
说 模块名称
说 相加法(3,5)计算工具 8
- 把这两个示例分别保存为同目录下的「计算工具.灵」和「主程序.灵」,然后运行主程序。
- 可以公开方法、记录类型、全局变量和固定值。公开变量必须明确写「公开 全局」或「公开 固定」。
- 公开声明放在模块最外层,不要把普通执行语句或方法内部的局部变量标成公开。
- 跨模块重复的公开名称可能产生歧义。优先规划清楚模块职责与接口名称。
错误处理与资源清理
输入格式不正确、读取文件失败等属于需要处理的运行问题。「尝试」执行可能出错的操作,「遇到错误 原因」读取错误消息,「无论如何」用于无论成功或失败都要执行的清理。
尝试
报错“分数格式不正确”
遇到错误 原因
说“已经处理:” + 原因
无论如何
说“结束本次检查”
结束已经处理:分数格式不正确 结束本次检查
「报错 文本」主动抛出可捕获的错误。「最后执行」登记当前作用域退出时执行的操作,适合方法中的清理工作。
处理法():
最后执行 说“清理完成”
说“正在处理”
结束
处理法()正在处理 清理完成
必须满足的条件
「必须 条件」声明一条不允许违反的要求;可以用「否则说」补充错误原因。它适合检查程序不变量,不适合代替所有可恢复的输入校验。
全局 总和是0
每个 数字 从 1 到 3,做
总和改为总和 + 数字
结束
必须 总和 相等 6,否则说“求和结果不正确”
说“检查通过”检查通过
文本文件与二进制文件
文件操作使用文本路径。先创建父目录,再写入文件。写入会覆盖同名文件,示例使用单独的演示目录;复制到自己的项目时先确认路径。
固定 目录是“文档演示”
固定 路径是“文档演示/问候.txt”
创建文件夹(目录)
写入文本文件(路径,“你好,小林”)
要 文件是否存在(路径) 就
说 读取文本文件(路径)
结束你好,小林
全局 数据:字节列表是[0,127,255]
写入二进制文件(“演示数据.bin”,数据)
全局 读回是读取二进制文件(“演示数据.bin”)
说 列表长度(读回)3
- 读取文本文件(路径)
- 读取完整文本内容;失败时应捕获错误。
- 写入文本文件(路径,内容)
- 写入文本内容,覆盖已有文件。
- 读取二进制文件(路径)
- 返回字节列表,不经过文本编码转换。
- 写入二进制文件(路径,字节列表)
- 写入原始字节,普通整数列表不能直接当字节列表。
- 文件是否存在(路径)
- 检查文件是否存在,不保证稍后的读取一定成功。
- 创建文件夹(路径)
- 创建目标目录。
JSON 与安全访问
JSON 用于交换结构化数据。「解析JSON」把文本变成 JSON 值;按键或位置查找,以及转换到文本、整数等类型,都可能失败,所以返回可空值。
固定 原文是“{\"name\":\"小林\",\"age\":21}”
全局 根值:JSON是解析JSON(原文)
全局 名称节点是JSON按键查找(根值,“name”)
要 有值(名称节点) 就
局部 名称是JSON转文本(取值(名称节点))
要 有值(名称) 就
说 取值(名称)
结束
结束
说 JSON类型(根值)小林 对象
- 解析JSON(文本)
- 解析 JSON,格式不合法时抛出错误。
- 生成JSON文本(JSON值)
- 把 JSON 值序列化为文本。
- 读取JSON文件(路径) / 写入JSON文件(路径,JSON值)
- 读取或覆盖写入 JSON 文件。
- JSON按键查找(JSON值,文本键)
- 读取对象字段,返回可空JSON。
- JSON按位置查找(JSON值,整数位置)
- 读取数组元素,下标从 0 开始,返回可空JSON。
- JSON转文本 / JSON转整数 / JSON转浮点 / JSON转真假
- 尝试转换到对应类型,返回可空结果。
- JSON类型(JSON值)
- 返回类型名称,例如「对象」。
获取网络文本
「获取网络文本(地址)」发送 HTTP/HTTPS GET 请求并返回响应正文。网络请求可能超时或返回错误状态,应放在错误处理结构中。
尝试
局部 内容是获取网络文本(“https://example.com”)
说 内容
遇到错误 原因
说“请求失败:” + 原因
结束环境相关示例:仅验证编译,不自动联网或执行平台操作。
当前内置策略为 15 秒无数据超时、最多 5 次重定向和 4 MiB 正文上限。只接受 HTTP 或 HTTPS 地址;非 2xx 响应按错误处理。示例需要联网,输出取决于远端服务,不给出固定运行结果。
回到文档开头定宽整数与位运算
二进制协议和硬件数据需要明确位宽。空灵提供 8、16、32、64 位有符号与无符号整数;「字节」是 8 位无符号整数,取值为 0 到 255。也支持 32位浮点、64位浮点。
全局 状态:字节是0b1010
全局 低位:字节是状态 位与 0b0011
全局 宽值:16位无符号整数是转为16位无符号整数(状态)
说 低位
说 宽值2 10
- 8位整数 / 16位整数 / 32位整数 / 64位整数
- 有符号整数。
- 8位无符号整数 / 16位无符号整数 / 32位无符号整数 / 64位无符号整数
- 非负定宽整数。
- 位与 / &;位或 / |;位异或 / ^
- 按二进制位计算。
- 左移 / <<;右移 / >>;位取反 / ~
- 移动或翻转二进制位。
针对目标平台编译
「针对 … 系统编译」和「针对 … 架构编译」决定哪些代码参与编译。它与运行时的「要」不同:选择依据是编译目标,而不是用户运行时输入的条件。
全局 平台名称:文本是“未知”
针对 Windows 系统编译:
平台名称改为“Windows”
否则针对 macOS 系统编译:
平台名称改为“macOS”
否则
平台名称改为“其他”
结束
说 平台名称环境相关示例:仅验证编译,不自动联网或执行平台操作。
架构条件可使用已支持的名称,例如 x64、x86、ARM64。写出条件不等于已经准备好交叉编译环境;生成其他平台程序仍需要相应的编译器、链接器和平台资源。
回到文档开头桌面扩展与适用范围
仓库提供 kongling3desktop 扩展与桌面示例,用于对话框等桌面能力。它不是本手册基础语法的必需导入;调用这些能力需要确认当前操作系统与发行包支持。
基础语法中的「说」「听」操作终端输入输出,不会自动创建图形窗口。IDE 的流程图、编辑提示和项目栏也属于开发工具功能,不是语言语句。
- 先在终端示例里确认逻辑和数据类型,再接入桌面交互。
- 不要把某个平台上的示例运行成功,推断为所有 Windows、macOS 和移动平台都可用。
- 本页覆盖自然中文表层语法及已核对的常用接口,不是全部底层标准库、后端或 GUI 框架的 API 手册。
完整示例:小林的成绩单
这个例子把类型、方法、列表、循环、条件和检查串在一起。先运行原版,再修改成绩列表,观察平均分和评价如何变化。
语言 空灵 3
评价法(成绩:整数)返回文本:
要 成绩 大于等于 90 就
返回“优秀”
否则要 成绩 大于等于 60 就
返回“及格”
否则
返回“继续努力”
结束
结束
固定 姓名是“小林”
全局 成绩们:整数列表是[88,92,75]
全局 总分是0
必须 列表长度(成绩们) 大于 0,否则说“请先录入成绩”
每个 成绩 在 成绩们 里,做
必须 成绩 不小于 0 并且 成绩 不大于 100
总分改为总分 + 成绩
说 转为文本(成绩) + “:” + 评价法(成绩)
结束
说 姓名 + “的总分:” + 总分
说 “平均分:” + (总分 / 列表长度(成绩们))88:及格 92:优秀 75:及格 小林的总分:255 平均分:85.0
- 把姓名改成另一个名字,观察文本输出。
- 给列表再加入一个成绩,检查总分是否随之变化。
- 把某个成绩改为 101,观察「必须」如何报告不合法数据。
- 把成绩列表改为空,观察为什么需要在除法之前检查长度。
常见错误与排查顺序
优先处理编译器报告的第一个错误。后面的报错可能只是前面结构未闭合造成的连锁结果。核对文件、行号和列号后,先缩小到最短能复现问题的代码。
- 找不到名称或方法
- 检查拼写、作用域、参数个数,以及模块是否导入、声明是否公开。
- 原来是整数,不能改成文本
- 保持变量类型一致,或另建变量;需要转换时使用明确的转换方法。
- 已经固定,不能修改
- 需要修改的数据使用变量;固定值、固定列表不要作为输入或变更目标。
- 缺少结束 / 否则前面没有对应条件
- 检查结构配对和缩进,尤其是方法内嵌套的条件、循环。
- 可能是「没有」
- 保存可空结果,先「有值」再「取值」;发生修改后重新检查。
- 索引越界
- 确认列表不是空的,下标从 0 开始,且小于列表长度。
- 输入内容无法转成数字
- 「听」得到文本,先去掉首尾空白或使用转换接口,并处理格式错误。
- 无法读取文件
- 检查程序工作目录、路径、文件权限以及文件是否被其他程序移动。
- 编译器命令不存在
- 使用正确的完整 kl.exe 路径,或在已经配置好的 IDE 内运行。
- 示例在旧包中无法识别
- 确认当前使用空灵 3,核对下载版本;不要混用不同版本的编译器、标准库和配置。
关键词速查
- 语言 空灵 3
- 选择自然中文语法。
- 全局 / 局部 / 固定 / 改为
- 声明与赋值。
- 说 / 听
- 终端输出与输入。
- 要 / 就 / 否则要 / 否则 / 结束
- 条件分支与结构收尾。
- 每个 / 从 / 到 / 在 / 里 / 做
- 范围与集合遍历。
- 重复 / 次 / 当 / 时 / 继续 / 跳出
- 次数循环、条件循环与循环控制。
- 返回 / 待实现
- 方法返回与占位。
- 记录 / 引用记录
- 结构化类型。
- 没有 / 可空… / 有值 / 取值
- 可空值与安全读取。
- 数据表 / 有序数据表 / 空表
- 键值集合。
- 导入 / 公开
- 模块与可见性。
- 尝试 / 遇到错误 / 无论如何 / 报错 / 最后执行
- 可恢复错误与清理。
- 必须 / 否则说
- 必须满足的条件。
- 针对 / 系统编译 / 架构编译 / 否则针对
- 编译目标条件。
没有找到需要的能力时,先搜索操作名称,也可以回到相关数据类型章节。本手册中的可运行示例会参与文档测试;网络、平台分支等有环境依赖的示例会明确区分验证方式。
回到文档开头