💡 示例程序
从 Hello World 到闭包与继承 —— 通过示例学习 Vora 的各种特性。
👋 Hello, World 基础
最简单的 Vora 程序。使用 print() 输出文本。
print("Hello, World!")
print("你好,世界!")
$ vora hello.va
Hello, World!
你好,世界!
Hello, World!
你好,世界!
📦 变量与类型 基础
let 声明变量,支持 7 种运行时类型。数字支持 0x/0o/0b 前缀。
let n = 42 // Number (double)
let f = 3.14 // Number
let b = true // Boolean
let s = "hello" // String
let arr = [1, 2, 3] // Array
let nothing = null
// 数字前缀
let hex = 0xFF // 255(十六进制)
let oct = 0o77 // 63(八进制)
let bin = 0b101 // 5(二进制)
✨ 字符串插值 基础
${...} 语法在字符串中嵌入表达式,支持变量和属性访问。
let name = "Vora"
let version = 11
print("Welcome to ${name} v0.${version}!")
// 属性访问
Obj Point(x, y) { this.x = x; this.y = y }
let p = Point(10, 20)
print("Position: (${p.x}, ${p.y})")
Welcome to Vora v0.11!
Position: (10, 20)
Position: (10, 20)
🔀 条件分支 控制流
if/else 判断条件。可与三元运算符 ? : 组合使用。
let score = 85
if (score >= 90) {
print("A")
} else if (score >= 80) {
print("B")
} else {
print("C")
}
// 三元运算符:右结合,短路求值
let grade = score > 90 ? "A" : score > 80 ? "B" : "C"
print(grade) // "B"
🔄 循环 控制流
Vora 提供 while 循环和 for-in 迭代,支持 break/continue。
// while 循环
let i = 0
while (i < 5) {
print(i)
i += 1
}
// for-in:数组
for item in [1, 2, 3] {
print(item)
}
// for-in:字符串
for ch in "Vora" {
print(ch) // V, o, r, a
}
// for-in:range()
for i in range(5) {
print(i) // 0, 1, 2, 3, 4
}
// range(start, stop, step)
for i in range(10, 0, -2) {
print(i) // 10, 8, 6, 4, 2
}
🔒 函数与闭包 中级
Vora 函数是一等公民。内层函数通过闭包捕获外层变量。
// 基础函数
func add(a, b) {
return a + b
}
print(add(3, 4)) // 7
// 闭包:计数器
func makeCounter() {
let count = 0
return func() {
count = count + 1
return count
}
}
let c = makeCounter()
print(c()) // 1
print(c()) // 2
// 闭包:函数工厂
func makeMultiplier(factor) {
return func(x) { return x * factor }
}
let double = makeMultiplier(2)
let triple = makeMultiplier(3)
print(double(5)) // 10
print(triple(5)) // 15
🌀 递归 中级
func factorial(n) {
if (n <= 1) return 1
return n * factorial(n - 1)
}
print(factorial(5)) // 120
// 斐波那契
func fib(n) {
if (n <= 1) return n
return fib(n - 1) + fib(n - 2)
}
for i in range(10) {
print(fib(i)) // 0, 1, 1, 2, 3, 5, 8, 13, 21, 34
}
🏛️ 对象与继承 进阶
Obj 定义类,: 实现单继承。构造函数链从根到叶执行。
Obj Animal(name) {
this.name = name
func speak() { print("...") }
func getName() { return this.name }
}
Obj Dog : Animal (name, breed) {
this.breed = breed
func speak() {
print("Woof! I'm " + this.name + " the " + this.breed)
}
}
Obj Puppy : Dog (name, breed, toy) {
this.toy = toy
}
let d = Dog("Rex", "Husky")
d.speak() // Woof! I'm Rex the Husky
print(d.name) // Rex(父类构造函数设置)
print(d.getName()) // Rex(继承的方法)
let p = Puppy("Buddy", "Golden", "Ball")
print(p.toy) // Ball
p.speak() // Woof! I'm Buddy the Golden(多层继承)
⚠️ 异常处理 进阶
try/catch/finally 三种组合。自定义错误对象通过 throw 抛出。
// 基本 try/catch
try {
throw "something went wrong"
} catch (e) {
print("Caught: " + e)
} finally {
print("This always runs")
}
// 自定义错误对象
Obj ValidationError(msg) {
this.message = msg
}
func validateAge(age) {
if (age < 0) {
throw ValidationError("Age cannot be negative")
}
if (age > 150) {
throw ValidationError("Age out of range")
}
return true
}
try {
validateAge(-5)
} catch (e) {
print("Invalid: " + e.message) // Invalid: Age cannot be negative
}
📋 数组操作 中级
数组通过 [] 创建和索引。+/+= 合并或追加。
let arr = [1, "hello", true, null]
print(arr[0]) // 1
print(arr[1]) // hello
arr[0] = 42 // 索引赋值
// 数组合并
let a = [1, 2]
let b = [3, 4]
let c = a + b // [1, 2, 3, 4]
// 追加元素
a += 99 // [1, 2, 99]
// 嵌套数组
let matrix = [[1, 2], [3, 4]]
print(matrix[0][1]) // 2
🌐 Unicode 标识符 特色
Vora 原生支持中文、日文等多语言标识符。
let 名字 = "小明"
let 年龄 = 20
func 打印信息(姓名, 岁数) {
print("${姓名} 今年 ${岁数} 岁")
}
打印信息(名字, 年龄)
// 日文标识符
let ユーザー名 = "tanaka"
let café = "espresso"
// 混合使用
Obj 学生(姓名, 分数) {
this.姓名 = 姓名
this.分数 = 分数
}
let s = 学生("小红", 95)
print(s.姓名 + " 的分数: " + s.分数)
🎯 运算符一览 参考
// 算术:+ - * / % **
10 + 3 // 13
10 - 3 // 7
10 * 3 // 30
10 / 3 // 3.333...
10 % 3 // 1
2 ** 8 // 256(幂运算,右结合)
// 比较:< <= > >= == !=
5 < 10 // true
5 == 5 // true
"a" != "b" // true
// 逻辑:&& || !(短路求值)
let a = false && neverCalled() // neverCalled 不执行
let b = true || neverCalled() // neverCalled 不执行
// 自增/自减:++ --(前缀/后缀)
let x = 5
print(x++) // 5(先返回后自增)
print(x) // 6
print(++x) // 7(先自增后返回)
// 复合赋值:+= -= *= /= %=
x += 3 // x = x + 3
x *= 2 // x = x * 2
🧰 内建函数 参考
// print(...) — 变参输出
print("Hello", 42, true) // Hello 42 true
// clock() — 时间戳(秒,毫秒精度)
let start = clock()
// ... 执行一些代码 ...
print("Elapsed: " + (clock() - start) + "s")
// input(prompt?) — 读取标准输入
let name = input("Your name: ")
print("Hello " + name)
// int(value) / float(value) — 类型转换
print(int(3.14)) // 3
print(int("42")) // 42
print(float("3.14")) // 3.14
// range(...) — 生成数字数组
range(3) // [0, 1, 2]
range(2, 5) // [2, 3, 4]
range(0, 10, 2) // [0, 2, 4, 6, 8]
range(10, 0, -2) // [10, 8, 6, 4, 2]
// bin(num) / oct(num) / hex(num) — 进制转换
print(hex(255)) // "0xFF"
print(bin(5)) // "0b101"
print(oct(63)) // "0o77"
// assert(cond, msg?) — 断言
assert(2 + 2 == 4) // 通过
assert(2 + 2 == 5, "Math broken!") // 抛出 RuntimeError