Zig 函数
関数は、プログラミング言語においてコードを整理し、ロジックを実装するための重要なツールです。
関数はコードを整理するための重要なツールであり、関数を適切に使用することで、コードの可読性と再利用性を高めることができます。
実際のプログラミングでは、必要に応じてさまざまな関数を定義し、特定の機能を実装することができます。
Zigの関数はfnキーワードで定義されます。
基本语法
Zigでは、関数定義の基本構文は次のとおりです:
fn 函数名(参数列表) 返回类型 {
// 函数体
}例えば、簡単な関数 printHello を定義して、"Hello, World!" を出力します:
实例
pub fn main() void {
printHello();
}
fn printHello() void {
std.debug.print("Hello, World!\n", .{});
}
コンパイル後の出力内容は:
Hello, World!
参数传递
関数は引数を受け取ることができ、これらの引数はさまざまな型の値にすることができます。
引数は関数定義時に列挙され、呼び出し時に関数に渡されます。例えば:
实例
pub fn main() void {
greet("Alice");
}
fn greet(name: []const u8) void {
std.debug.print("Hello, {s}!\n", .{name}); // 使用 {s} 格式符来打印字符串切片
}
コンパイル後の出力内容は:
Hello, Alice!
返回值
関数は値を返すことができます。戻り値の型は関数定義で指定され、次のように使用します:return关键字。
例えば、2つの整数の和を計算する関数を定義します:
实例
pub fn main() void {
const result = add(3, 5);
std.debug.print("3 + 5 = {}\n", .{result});
}
fn add(a: i32, b: i32) i32 {
return a + b;
}
コンパイル後の出力内容は:
3 + 5 = 8
递归
関数は自身を呼び出すことができます。つまり、再帰呼び出しです。
例えば、階乗を計算する再帰関数を定義します:
实例
pub fn main() void {
const result = factorial(5);
std.debug.print("5! = {}\n", .{result});
}
fn factorial(n: i32) i32 {
if (n == 0) {
return 1;
} else {
return n * factorial(n - 1);
}
}
コンパイル後の出力内容は:
5! = 120
函数重载
Zigは、従来の意味での関数オーバーロード(つまり、同じ名前で異なる引数を持つ複数の関数)をサポートしていません。
Zigはジェネリック関数の機能を提供しており、コンパイル時定数パラメータを使用することで、関数オーバーロードに似た効果を実現できます。例えば:
实例
pub fn main() void {
printValue(i32, 5); // 型を i32 と明示的に指定する
printValue([]const u8, "Hello"); // 型を明示的に []const u8 と指定する
}
fn printValue(comptime T: type, value: T) void {
std.debug.print("{any}\n", .{value}); // {any} を使用して異なる型の値を処理する
}
この例では、printValue関数は任意の型の引数を受け取り、引数の型に応じて出力します。
コンパイル後の出力内容は:
5
{ 72, 101, 108, 108, 111 }
内联函数
インライン関数とは、コンパイル時に関数のコードを呼び出し箇所に直接挿入し、関数呼び出しのオーバーヘッドを回避するものです。
Zig では、inlineキーワードを使用してインライン関数を定義できます。例えば:
实例
// 定义一个内联函数
inline fn square(x: i32) i32 {
return x * x;
}
pub fn main() void {
const result = square(5); // 呼び出し箇所にインライン関数コードを挿入
std.debug.print("Square of 5 is {}\n", .{result});
}
この例では、square関数はインライン関数として定義されており、コンパイラはそのコードを呼び出し箇所に直接挿入します。
コンパイル後の出力内容は:
Square of 5 is 25其他扩展