学习语言

基础语法与类型

言序的值、变量、不可改写绑定、类型标注与运算规则。

值与绑定

 数目: 42
 比例: 3.14
 题名: 「天地玄黄」
 可行:
 未有:
 灵活:任意 42
 名录:「甲」「乙」】;

 数目  数目  1

创建可以重新赋值的变量,创建不可重新赋值的绑定。只约束绑定本身,不会递归冻结它所指向的列或典。

类型标注可以省略;省略后变量可接纳任意类型。显式标注任意具有相同的动态顶类型语义,可接纳空、标量、容器和用户对象。其他带标注变量在初次声明和每次时都会检查。数值目前使用十进制阿拉伯数字,文字可写成「文字」“文字”"文字"

使用|标注联合类型,?标注可空类型,尖括号描述容器元素,法(…):…描述可调用值:

 标识:|「甲」
 次值:? 
 分数:<>{「甲」90};
 变换:(数): 加一;

yanxu 查 文卷.yx会在执行前检查变量、容器元素、参数、归值、可变性、继承/协议符合性、覆写签名与可确定的运算符冲突,并在和原生类型判断分支中收窄类型。相对模块会读取其公开 API 摘要而不执行顶层代码;无法证明的动态值仍按任意处理,运行时同时保留防线。

类型判断与收窄

值 是 类型直接消费类型语法并返回理值,支持命名类型、类、协议、联合、可空、泛型容器和法类型。它不同于返回显示文字的类型(值),适合稳定的程序判断:

 候选:动物|();

 候选 
    # 此分支内,静态检查器把候选收窄为鹤。
 候选.清唳();


 候选  动物|
123<>

对子类的判断会沿祖先链,对协议的判断会沿类及父类显式纳入的协议链。真假分支目前只自动收窄直接变量;复杂成员或调用结果可以先绑定再判断。

内置类型

类型含义
数值
文字
真或假
空值
用户函数或内置函数
类本身
对象任意类的实例
模块模块命名空间
有序可变序列
有序不可变元组
保持插入顺序的映射
遍器有耗尽状态的惰性迭代器
协议名满足指定字段和方法形状的实例
可捕获的结构化运行错误
任意不限制值类型
类名指定类的实例

运算与优先级

层级(由高到低)运算符
调用、成员、下标、切片函数(参数)对象.成员容器【下标】容器【起:止】
一元!-
乘除*/×÷
加减+-
比较大于不小于小于不大于>>=<<=
类型判断
相等等于不等于==!=
逻辑且
逻辑或

会短路求值。既可用于两个数相加,也可用于两段文字相接。括号可以显式改变求值顺序。