125 lines
2.0 KiB
Markdown
125 lines
2.0 KiB
Markdown
# TSL 常见编码模式
|
|
|
|
> 本文档是 `$tsl-guide` 的子文档,汇总常见的组织方式与实践范式。
|
|
> 语法示例以 `docs/tsl/syntax_book/` 为准。
|
|
|
|
## 目录
|
|
|
|
- [参数校验](#参数校验)
|
|
- [早返回(减少嵌套)](#早返回减少嵌套)
|
|
- [错误处理与上下文信息](#错误处理与上下文信息)
|
|
- [I/O 分层](#io-分层)
|
|
- [常量与配置管理](#常量与配置管理)
|
|
- [集合与结果集处理](#集合与结果集处理)
|
|
- [性能小贴士](#性能小贴士)
|
|
|
|
---
|
|
|
|
## 参数校验
|
|
|
|
尽早验证输入并给出明确错误信息。
|
|
|
|
```tsl
|
|
Function ValidateUserId(UserId);
|
|
Begin
|
|
If UserId <= 0 then
|
|
Raise "invalid user_id: " + IntToStr(UserId);
|
|
End;
|
|
```
|
|
|
|
---
|
|
|
|
## 早返回(减少嵌套)
|
|
|
|
```tsl
|
|
Function NormalizeName(Name);
|
|
Begin
|
|
If Trim(Name) = "" then
|
|
Return "";
|
|
|
|
Return UpperCase(Trim(Name));
|
|
End;
|
|
```
|
|
|
|
---
|
|
|
|
## 错误处理与上下文信息
|
|
|
|
```tsl
|
|
Function LoadConfig(Path);
|
|
Begin
|
|
Try
|
|
Return ReadFile(Path);
|
|
Except
|
|
Raise "load config failed: " + Path + ", " + ExceptObject.ErrInfo;
|
|
End;
|
|
End;
|
|
```
|
|
|
|
---
|
|
|
|
## I/O 分层
|
|
|
|
```tsl
|
|
Function ReadUserIds(Path);
|
|
Begin
|
|
Content := ReadFile(Path);
|
|
Return ParseUserIds(Content);
|
|
End;
|
|
|
|
Function ParseUserIds(Content);
|
|
Begin
|
|
// 纯函数:只负责解析
|
|
Return array();
|
|
End;
|
|
|
|
Function WriteReport(Path, Report);
|
|
Begin
|
|
WriteFile(Path, Report);
|
|
End;
|
|
```
|
|
|
|
---
|
|
|
|
## 常量与配置管理
|
|
|
|
```tsl
|
|
Const MaxRetries = 3;
|
|
Const TimeoutMs = 5000;
|
|
|
|
Function RetryFetch(Url);
|
|
Begin
|
|
For i := 1 to MaxRetries do
|
|
Begin
|
|
// ...
|
|
End;
|
|
End;
|
|
```
|
|
|
|
---
|
|
|
|
## 集合与结果集处理
|
|
|
|
```tsl
|
|
Function SumPositive(Values);
|
|
Begin
|
|
Total := 0;
|
|
For i := 0 to Length(Values) - 1 do
|
|
Begin
|
|
If Values[i] > 0 then
|
|
Total := Total + Values[i];
|
|
End;
|
|
Return Total;
|
|
End;
|
|
```
|
|
|
|
---
|
|
|
|
## 性能小贴士
|
|
|
|
仅当明确存在性能瓶颈时采用:
|
|
|
|
- 把循环内的常量/表达式提到循环外
|
|
- 避免在循环内执行 I/O 或 SQL
|
|
- 对结果集访问做局部缓存(如字段名映射)
|