@@ -1,30 +1,81 @@
|
||||
# TSL 快速落代码规则
|
||||
|
||||
本篇提供一份单点的语言核心事实速查,以及没有任何复用或模块需求时的默认起手骨架。
|
||||
本篇提供一份由专题页逐条派生的语言核心事实速查,以及没有任何复用或模块需求时的默认起手骨架。
|
||||
|
||||
## 本篇职责
|
||||
|
||||
在落代码前一次性给出跨专题的语言硬规则(赋值、文件形态、声明位置、命名参数、下标起点、类与 `unit` 外形),并提供术语对照和默认可执行脚本骨架。
|
||||
<!-- section-id: syntax-01-001 -->
|
||||
|
||||
在落代码前一次性汇总跨专题的语言硬规则(赋值、文件形态、声明位置、命名参数、下标起点、类与 `unit` 外形),并提供术语对照和默认脚本骨架。本页是强制读取的派生摘要,不独立拥有完整事实;每条规则的完整上下文仍由对应专题页拥有。
|
||||
|
||||
## 语言核心事实速查
|
||||
|
||||
<!-- section-id: syntax-01-002 -->
|
||||
|
||||
<!-- tags: 语法速查, 硬规则, 核心规则一览, 先看哪些, 常见规则汇总 -->
|
||||
|
||||
这一节是本语法手册默认的语言硬规则收口点。涉及赋值、`.tsl` 语句区 / 声明区、`.tsf` 模块、命名参数、类写法、`unit` 骨架和下标规则时,统一先看这里。
|
||||
这一节是专题事实的强制派生速查,不是第二份事实源。写代码时先核对这里,再按当前任务的语法要素取回对应专题 Section;`--check` 会逐条比较下面的摘要与专题页 canonical 规则。
|
||||
|
||||
- 赋值:普通赋值用 `:=`,不要把 `=` 当成普通赋值。
|
||||
- 后缀:用户已给出 `.tsl` / `.tsf` 后缀时,后缀就是判断依据;未给后缀时,入口流程、脚本任务或一次性执行逻辑对应 `.tsl`,可复用交付物(函数、过程、类、模块或扩展文件)对应 `.tsf`,只是脚本内部封装函数或类时仍按 `.tsl` 处理;仍不明确时向用户确认。
|
||||
- `.tsl`:可执行脚本,语句区在前并按顺序执行;函数 / 类声明区在后,供前面的语句调用或运行时解析。不要在声明区后面继续追加脚本语句。
|
||||
- `.tsf`:可复用模块 / 函数扩展文件;非 `unit` 顶层函数 / 过程部署到解释器 `funcext` 后,脚本可以直接调用;顶层类声明只按可复用声明理解;`unit` 按模块组织理解。
|
||||
- `.tsf` 文件名:文件名(不含扩展名)必须与第一个顶层声明同名,`UserAccount.tsf` 的顶层声明必须是 `function UserAccount`、`type UserAccount = class` 或 `unit UserAccount`。
|
||||
- `function` / `procedure`:用户只说“写一个函数”时默认用 `function`;只有用户明确要求 `procedure` / 过程时才用 `procedure Name(...); begin ... end;`。
|
||||
- 类:顶层类定义统一写成 `type Name = class ... end;`,不要写裸 `class Name`;创建对象有两种方式,`new ClassName()` 最常用,`createObject(...)` 作为次选;需要字符串类名、类类型变量或跨 `unit` 路径时,更适合用 `createObject(...)`。
|
||||
- `unit`:涉及多文件组织时,先按 `unit Name; interface ... implementation ... end.` 骨架理解;不要把 `unit` 当默认最小起手。
|
||||
- 命名参数:写法是 `Func(a:1, b:2)`,不要写成 `Func(a = 1, b = 2)`。
|
||||
- 下标:`array(...)` 既可以写顺序数组,也可以写字符串键表;顺序数组和 `binary(...)` 二进制缓冲区下标从 `0` 开始,字符串下标从 `1` 开始。
|
||||
<!-- quickstart-rule: assignment -->
|
||||
|
||||
- 普通变量赋值使用 `:=`;`=` 在普通表达式里用于比较,不用于赋值。
|
||||
|
||||
<!-- quickstart-rule: file-choice -->
|
||||
|
||||
- 未给后缀时,入口流程、脚本任务或一次性执行逻辑对应 `.tsl`;可复用交付物(函数、过程、类、模块或扩展文件)对应 `.tsf`;只是脚本内部封装函数或类时,仍按 `.tsl` 处理;仍不明确时向用户确认,不要把脚本入口和可复用模块合并成一个猜测文件。
|
||||
|
||||
<!-- quickstart-rule: tsl-layout -->
|
||||
|
||||
- `.tsl` 脚本按两段理解:语句区在前并按顺序执行;声明区在后,可放 `function / procedure` 或 `type Name = class`。写 `.tsl` 时先写语句区,需要函数、过程或类时把声明区放在语句区之后。
|
||||
|
||||
<!-- quickstart-rule: tsf-layout -->
|
||||
|
||||
- 写 `.tsf` 时只写顶层函数 / 过程 / 类声明,或 `unit`;不要写成会直接顺序执行的脚本入口。
|
||||
|
||||
<!-- quickstart-rule: tsf-filename -->
|
||||
|
||||
- `.tsf` 文件名(不含扩展名)必须与第一个顶层声明同名;第一个声明可以是同名 `function`、`type Name = class` 或 `unit`。
|
||||
|
||||
<!-- quickstart-rule: function-default -->
|
||||
|
||||
- 用户提示词里的“函数”默认对应 `function`,不要自动改写成 `procedure`。
|
||||
|
||||
<!-- quickstart-rule: procedure-explicit -->
|
||||
|
||||
- `procedure Name(...); begin ... end;` 只在用户明确要求 `procedure` / 过程时生成;不要因为没有返回值就自动改用 `procedure`。
|
||||
|
||||
<!-- quickstart-rule: class-shape -->
|
||||
|
||||
- 类定义统一按 `type Name = class ... end;` 写。
|
||||
|
||||
<!-- quickstart-rule: object-creation -->
|
||||
|
||||
- 普通本地类实例化默认生成 `new ClassName()`;`createObject("ClassName")`、`createObject(ClassType)` 只在字符串类名、类类型变量或跨 `unit` 路径场景生成。
|
||||
|
||||
<!-- quickstart-rule: unit-shape -->
|
||||
|
||||
- `unit` 是完整的顶层主体;常见完整形态是 `unit Name; interface ... implementation ... end.`。
|
||||
|
||||
<!-- quickstart-rule: unit-default -->
|
||||
|
||||
- 如果没有特殊需求,默认优先用完整形态;简写形态只在不需要显式区分 `interface` / `implementation` 时再用。
|
||||
|
||||
<!-- quickstart-rule: named-arguments -->
|
||||
|
||||
- 调用时支持命名参数,写法是 `name: value`。
|
||||
|
||||
<!-- quickstart-rule: named-argument-order -->
|
||||
|
||||
- 一旦某次调用里开始使用命名参数,后面的参数就不能再退回位置参数。
|
||||
|
||||
<!-- quickstart-rule: index-origins -->
|
||||
|
||||
- `array(...)` 既可以写顺序数组,也可以写字符串键表;顺序数组和 `binary(...)` 二进制缓冲区下标从 `0` 开始,字符串下标从 `1` 开始。
|
||||
|
||||
## 术语对照
|
||||
|
||||
<!-- section-id: syntax-01-003 -->
|
||||
|
||||
- “脚本语句区”:`.tsl` 文件开头会按顺序执行的语句。
|
||||
- “声明区”:`.tsl` 语句区之后的 `function / procedure` 或 `type Name = class` 声明。
|
||||
- “顶层 `function / procedure`”:在 `.tsf` 中指模块暴露的顶层函数 / 过程,在 `.tsl` 中指脚本声明区里的函数 / 过程。
|
||||
@@ -33,6 +84,8 @@
|
||||
|
||||
## 默认起手骨架
|
||||
|
||||
<!-- section-id: syntax-01-004 -->
|
||||
|
||||
<!-- tags: 起手模板, 从哪开始写, 最小可跑, 第一个脚本, hello world -->
|
||||
|
||||
如果用户只要求写一段代码、脚本或示例,且没有明确 `.tsf`、`unit`、模块复用或对象建模需求,直接从 `.tsl` 脚本版本开始:
|
||||
|
||||
Reference in New Issue
Block a user