学习语言
基础语法与类型
言序的值、变量、不可改写绑定、类型标注与运算规则。
值与绑定
令 数目:数 为 42;
令 比例:数 为 3.14;
令 题名:文 为 「天地玄黄」;
令 可行:理 为 真;
令 未有:空 为 空;
令 灵活:任意 为 42;
定 名录:列 为【「甲」,「乙」】;
置 数目 为 数目 加 1;令创建可以重新赋值的变量,定创建不可重新赋值的绑定。定只约束绑定本身,不会递归冻结它所指向的列或典。
类型标注可以省略;省略后变量可接纳任意类型。显式标注任意具有相同的动态顶类型语义,可接纳空、标量、容器和用户对象。其他带标注变量在初次声明和每次置时都会检查。数值目前使用十进制阿拉伯数字,文字可写成「文字」、“文字”或"文字"。
使用|标注联合类型,?标注可空类型,尖括号描述容器元素,法(…):…描述可调用值:
令 标识:数|文 为「甲」;
令 次值:数? 为 空;
定 分数:典<文,数> 为{「甲」:90};
定 变换:法(数):数 为 加一;yanxu 查 文卷.yx会在执行前检查变量、容器元素、参数、归值、可变性、继承/协议符合性、覆写签名与可确定的运算符冲突,并在空和原生类型判断分支中收窄类型。相对模块会读取其公开 API 摘要而不执行顶层代码;无法证明的动态值仍按任意处理,运行时同时保留防线。
类型判断与收窄
值 是 类型直接消费类型语法并返回理值,支持命名类型、类、协议、联合、可空、泛型容器和法类型。它不同于返回显示文字的类型(值),适合稳定的程序判断:
定 候选:动物|文 为 鹤();
若 候选 是 鹤 则
# 此分支内,静态检查器把候选收窄为鹤。
言 候选.清唳();
终
言 候选 是 动物|文;
言 【1,2,3】 是 列<数>;对子类的判断会沿祖先链,对协议的判断会沿类及父类显式纳入的协议链。真假分支目前只自动收窄直接变量;复杂成员或调用结果可以先绑定再判断。
内置类型
| 类型 | 含义 |
|---|---|
数 | 数值 |
文 | 文字 |
理 | 真或假 |
空 | 空值 |
法 | 用户函数或内置函数 |
类 | 类本身 |
对象 | 任意类的实例 |
模块 | 模块命名空间 |
列 | 有序可变序列 |
元 | 有序不可变元组 |
典 | 保持插入顺序的映射 |
遍器 | 有耗尽状态的惰性迭代器 |
| 协议名 | 满足指定字段和方法形状的实例 |
误 | 可捕获的结构化运行错误 |
任意 | 不限制值类型 |
| 类名 | 指定类的实例 |
运算与优先级
| 层级(由高到低) | 运算符 |
|---|---|
| 调用、成员、下标、切片 | 函数(参数)、对象.成员、容器【下标】、容器【起:止】 |
| 一元 | 非、!、- |
| 乘除 | 乘、除、*、/、×、÷ |
| 加减 | 加、减、+、- |
| 比较 | 大于、不小于、小于、不大于、>、>=、<、<= |
| 类型判断 | 是 |
| 相等 | 等于、不等于、==、!= |
| 逻辑且 | 且 |
| 逻辑或 | 或 |
且和或会短路求值。加既可用于两个数相加,也可用于两段文字相接。括号可以显式改变求值顺序。