0Pricing
Zig Academy · レッスン

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. @typeInfoによるフィールドのリフレクション
  2. @Typeによる型の構築
  3. コンパイル時の検証と@compileError
  4. comptimeによるコード生成
← Zig Academyに戻る