関数
関数定義、戻り値、エフェクト注釈。
関数
Sounio の関数は式です。ブロック内の最後の式が戻り値になります。
基本
fn add(a: i32, b: i32) -> i32 {
a + b
}
fn greet(name: string) {
print("Hello, ")
println(name)
}
呼び出し
let sum = add(3, 5) // 8
greet("World") // Hello, World!
エフェクト宣言
仕様では、副作用は関数シグネチャの with ... で宣言することが求められます。
fn log(msg: string) with IO {
println(msg)
}
複数のエフェクトを組み合わせられます:
fn safe_div(a: i32, b: i32) -> i32 with Panic {
if b == 0 {
panic("division by zero")
}
a / b
}
メソッド(impl)
型に対して関数を定義できます:
struct Point {
x: f64,
y: f64,
}
impl Point {
fn new(x: f64, y: f64) -> Point {
Point { x: x, y: y }
}
fn distance(&self, other: &Point) -> f64 {
let dx = self.x - other.x
let dy = self.y - other.y
sqrt(dx * dx + dy * dy)
}
}
仕様メモ: ジェネリクス、クロージャ、高階関数は設計上サポートされますが、いくつかの組み合わせはコンパイラ側でまだ進化中かもしれません。