Initial Dever 0.0.1
This commit is contained in:
commit
81233d098c
1479 files changed
+163782
No files matched your search
@@ -0,0 +1,78 @@
|
||||
# 语法速查
|
||||
|
||||
源码用 `.dever`,说明写法见 [源码与说明](documentation.md)。完整规则见安装根 LANGUAGE.md,函数参数见 [签名索引](signatures.md)。
|
||||
|
||||
## 类型和函数
|
||||
|
||||
源码:[模板 App](../assets/template/module/hello/greeting/app.dever)
|
||||
|
||||
```dever
|
||||
greet(name: Text) (message: Text) {
|
||||
message = "Hello, " + name
|
||||
}
|
||||
```
|
||||
|
||||
函数为 `名称(输入) (命名输出)`,按位置调用;没有输入或输出仍写 `()`。单输出直接得到值,多输出按名字访问。正常结束前须给输出赋值。
|
||||
|
||||
类型用 UpperCamelCase,函数用 lowerCamelCase;字段、局部值和目录用 snake_case。record 构造一次给全字段,choice 按分支构造。App 的公开参数和输出不能暴露 Domain/Adapter 的私有类型。
|
||||
|
||||
局部值通常由表达式推断类型。解码、空集合或 null 需要上下文时,首次写 `input: CreateInput = dever.json.decode(payload)`;后续只写 `input = ...`,类型不变。不为提供类型另写包装函数。
|
||||
|
||||
常用类型有 Bool、Int、Decimal、Float、Text、Bytes、Id、Uuid、日期时间、Json、Secret;可空为 T?,集合为 List<T>、Map<K,V>。Model ID 是每个 Model 独有的类型。
|
||||
|
||||
集合成员判断用 `contains(values, target)`。条件不满足时失败用 `dever.api.require(condition, dever.api.Error.Invalid)`,不为每个条件写一对 true/false 函数。状态分支仍用分句表达。
|
||||
|
||||
| 易混规则 | 语义 |
|
||||
| --- | --- |
|
||||
| 小数字面量 | 默认 Decimal,科学计数形式为 Float |
|
||||
| 数值运算 | Int/Int 的 / 返回 Decimal;// 为整数除法 |
|
||||
| 可空值 | 用分句处理,没有隐式默认值或强制解包 |
|
||||
| Map | 保留插入顺序,相等比较也包含顺序 |
|
||||
| 普通值 | 修改副本不影响原值 |
|
||||
| 资源 | 副本共享读取位置或关闭状态 |
|
||||
|
||||
## 分句
|
||||
|
||||
条件使用同名函数分句,必须相邻、互斥且穷尽;没有顺序优先级。other 表示该参数位置未被明确模式覆盖的值。
|
||||
|
||||
源码:[分句测试](../assets/examples/collections/test/content/article/clauses.dever)
|
||||
|
||||
```dever
|
||||
grade(score: Int<60) (text: Text) {
|
||||
text = "fail"
|
||||
}
|
||||
|
||||
grade(score: Int >= 60) (text: Text) {
|
||||
text = "pass"
|
||||
}
|
||||
```
|
||||
|
||||
模式支持类型、choice 分支、null、常量及 Int/Decimal 范围,多参数检查全部组合。没有 if/else、match、return、任意循环或递归。
|
||||
|
||||
## 集合与处理函数
|
||||
|
||||
| 调用 | 结果 |
|
||||
| --- | --- |
|
||||
| each(handler, list) | handler 单输出时映射为 List,零输出时遍历 |
|
||||
| filter(handler, list) | 按 Bool 输出筛选 |
|
||||
| find(handler, list) | 第一个匹配值或 null |
|
||||
| sum(list) | 数值求和 |
|
||||
| reduce(handler, values, initial) | 按“元素、累计值”调用,空集合返回 initial |
|
||||
| reduceUntil(handler, values, initial) | handler 另输出 stop: Bool |
|
||||
| parallelEach(handler, values, limit) | 并行执行零输出 handler,返回前全部收尾 |
|
||||
|
||||
使用具名 handler,无 lambda 或运行时闭包。each/filter/find/投影 sum 可带一个末尾 context;reduce 的共享数据放累计状态。完整用法见 [集合项目](../assets/examples/collections/)。
|
||||
|
||||
## 失败和并发
|
||||
|
||||
choice 的 error 分支声明业务失败;普通调用默认传播,fail 主动失败,result(call) 捕获后交给穷尽分句。主动恢复写 recover("具体理由"),不能用读取错误消息代替处理。
|
||||
|
||||
类型化 JSON 也可直接捕获:`decoded: DecodeResult = result(dever.json.decode(payload))`。结果 Choice 用一个成功字段指定目标类型,error 分支包装 `dever.json.JsonResult`;错误身份保持不变,参数失败仍向外传播。无载荷且无 error 分支的 Choice 在 API/CMD/JSON 中使用分支名字符串,其他 Choice 留在程序内部。
|
||||
|
||||
pure 禁止 I/O、时钟和并发等效果。外部 I/O 经 Port/Adapter;密码使用 dever.crypto,Secret 不可打印、比较或转为普通 Text。
|
||||
|
||||
普通调用顺序完成,挂起自动推断。run 启动 Task,wait/stop 消费;timeout 到期先清理再执行 fallback,race 清理未选中的任务。Task/Group 不得逃逸。同步阻塞操作用 blocking,纯计算可用 parallel。
|
||||
|
||||
Stream/AsyncStream/Channel 的能力与生命周期由编译器检查;result 只改变失败表示,不改变调度或访问权限。
|
||||
|
||||
Channel 不接受可空元素;关闭且缓存读完时 receive 返回 null。需要传递空值时,使用带可空字段的消息 Choice。
|
||||
Reference in new issue
Block a user