锋,自有章法
Feng 语言,让开发者和 AI 都更易于写出 「清晰、可靠、可维护」 的代码
- AI 友好
- 显式契约
- 静态类型
- 自动内存管理
- 编译型
- 跨平台
快速安装
复制命令,在终端中运行
module app;
import std.io;
// main 是可执行程序的唯一入口
func main(args: string[]) {
println("你好世界");
}
module app;
// type 将数据与行为组织为静态类型
type User {
// let 字段只读,var 字段可更新
let name: string;
let email: string;
var active: bool;
// 方法通过 self 访问当前实例
func greeting(): string {
return "你好," + self.name;
}
}
module app;
// 对象契约声明对象必须提供的行为
spec Named {
func name(): string;
}
spec Persistable {
func save(): void;
}
// 函数契约声明可调用值的完整签名
spec Formatter(value: string): string;
// 联合契约表示值可来自多个候选类型
spec Identifier: int | string;
// 交叉契约要求值同时满足所有成员契约
spec Entity: Named & Persistable;
type User {
let username: string;
}
// fit 在不修改 type 声明的情况下满足对象契约
fit User: Named, Persistable {
func name(): string {
return self.username;
}
func save(): void {
}
}
module app;
import std.io;
// T 使函数在保留静态类型的同时复用逻辑
func identity<T>(value: T): T {
return value;
}
func main(args: string[]) {
let language = identity("Feng");
println("Hello, {0}!", language);
}
module app;
func calculate_total(): int {
var total = 0;
// 三段式 for 适合明确的计数范围
for var i = 1; i <= 3; i += 1 {
total += i;
}
// for/in 按顺序迭代数组元素
let values = [4, 5, 6];
for let value in values {
total += value;
}
// while 在每轮循环前重新检查条件
var remaining = 2;
while remaining > 0 {
total += remaining;
remaining -= 1;
}
return total;
}
module app;
func evaluate(score: int): string {
var status = "";
// if/else 语句按条件执行不同操作
if score >= 60 {
status = "通过";
} else {
status = "未通过";
}
// if 表达式直接生成可绑定的值
let level = if score >= 90 {
"优秀"
} else if score >= 60 {
"合格"
} else {
"待提高"
};
return status + ":" + level;
}
module app;
func describe(code: int): string {
var detail = "";
// match 语句执行第一个命中分支
match code {
200 { detail = "请求成功"; }
404 { detail = "资源不存在"; }
else { detail = "未知状态"; }
}
// match 表达式返回命中分支的值
let category = match code {
200...299 { "成功" }
400...499 { "客户端错误" }
else { "其他" }
};
return category + ":" + detail;
}
module app;
import std.io;
func require_port(port: int): int {
if port <= 0 {
// throw 终止当前路径并向调用方传递异常
throw "端口必须为正数";
}
return port;
}
func main(args: string[]) {
// 语句用法用于处理异常时的操作
try require_port(-1) catch error: string {
println(error);
};
// 表达式用法可以为异常路径提供回退值
let port = try require_port(-1) catch error: string {
println(error);
3000
};
println("使用端口:{0}", port);
}