comptimeによるコード生成
繰り返し処理を自動的に生成します
「comptimeによるコード生成」はCoddyKit上の無料Zig Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはZig Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Zig Academyコースには全4レッスンが含まれています。
繰り返しをコンパイラーに任せる
ほぼ同じコードをコピーする代わりに、パターンを一度記述し、comptime に各バリエーションを生成させます。⚙️
inline forでループを展開する
comptime のリストに対する inline for は、項目ごとに1つずつ、別々の文へ展開されます。すべてが最終プログラムに組み込まれます。
inline for (.{ 1, 2, 3 }) |n| {
std.debug.print("{}\n", .{n});
}型のフィールドを反復処理する
リフレクションと展開を組み合わせると、Structのすべてのフィールドを走査し、それぞれに対応するコードを自動的に生成できます。
inline for (@typeInfo(T).Struct.fields) |field| {
std.debug.print("{s}\n", .{field.name});
}名前でフィールドにアクセスする
@field を使うと、comptime 文字列で指定した名前のフィールドを読み取れます。生成コードが各フィールドを汎用的に扱う方法です。
const value = @field(my_struct, field.name);汎用プリンターを構築する
これらのツールを組み合わせると、あらゆるStructを出力する1つの関数を記述できます。各フィールドをコンパイル時に処理するコードへ展開されます。
inline for (@typeInfo(@TypeOf(s)).Struct.fields) |f| {
std.debug.print("{s}={any}\n", .{ f.name, @field(s, f.name) });
}型内に宣言を生成する
型を返す関数の中でループや条件分岐を実行し、return struct を使って計算した形状を型に組み込めます。
fn Vec(comptime n: usize) type {
return struct { data: [n]f32 };
}Switchでバリアントごとのコードを生成する
comptime のタグに対する switch は、選択された分岐だけにコンパイルされます。そのため、EnumやUnionの各ケースに合わせて動作を特化できます。
comptimeブロックは早期に実行される
セットアップを comptime ブロックで囲むと、ビルド中にルックアップテーブルや定数を一度だけ計算できます。実行時の処理は不要です。
const table = comptime blk: {
var t: [4]u8 = undefined;
break :blk t;
};これはマクロの代わりになる
Cでプリプロセッサを使う場面では、Zigはコンパイル時に通常のコードを使います。プログラム本体とそのジェネレーターを同じ言語で記述できます。
生成コードの正しさを保つ
生成処理に @compileError のガードを組み合わせると、サポートされない形状を、予想外の出力にする代わりに明確に失敗させられます。
強力でありながら読みやすい
単なるZigコードなので、生成ロジックはデバッグしやすく、型チェックも受けます。別の言語を必要とせず、マクロの力を得られます。✨
確認問題
コンパイル時にStructの各フィールドにつき1つの文を生成したいとします。フィールドリストを展開する構造はどれですか?
まとめ
inline for、@field、型を返す関数を使うと、comptime によって繰り返しコードを安全に生成でき、Cのマクロを置き換えられます。🎯
よくある質問
「comptimeによるコード生成」レッスンは無料ですか?
はい。「comptimeによるコード生成」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Zig Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Zig Academyコースには全4レッスンが含まれています。
「comptimeによるコード生成」で何を学びますか?
繰り返し処理を自動的に生成します ブラウザで直接実行するハンズオンコードでZig Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Zig Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのZig Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「comptimeによるコード生成」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このZig Academyレッスンでコードを書いて実行できますか?
はい。すべてのZig Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- @typeInfoによるフィールドのリフレクション
- @Typeによる型の構築
- コンパイル時の検証と@compileError
- comptimeによるコード生成