Zig Academy · レッスン

@TypeOfと型リフレクション

汎用性を保つために型を調べます。

レッスン 3/413 ステップ

「@TypeOfと型リフレクション」はCoddyKit上の無料Zig Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはZig Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Zig Academyコースには全4レッスンが含まれています。

型について調べる

ジェネリックコードでは、型を明示的に書かずに値の型を知る必要がよくあります。Zigでは組み込みの@TypeOfを使います。🔍

@TypeOfは型を返す

@TypeOfに1つ以上の式を渡すと、その型を返します。型の計算はすべてコンパイル時に行われます。

const T = @TypeOf(value);

式は実行されない

@TypeOfの引数は調べられるだけで、実行されません。内部に関数呼び出しがあっても、検査されるだけで実際には実行されません。

パラメーターの型を取得する

ジェネリック関数の内部では、任意の引数の型に名前を付けて再利用できます。たとえば、対応するlocal変数の宣言に使えます。

fn echo(x: anytype) void {
    const T = @TypeOf(x);
    _ = T;
}

読みやすい名前を取得する

組み込みの@typeNameは、型を読みやすい文字列に変換します。デバッグ出力やエラーメッセージに便利です。

const name = @typeName(i32);

@typeInfoでさらに深くリフレクションする

詳しい情報が必要な場合、@typeInfoはその型を説明するタグ付きunionを返します。整数、struct、ポインターなどの種類を確認できます。

const info = @typeInfo(i32);

型の種類で分岐する

結果はtagged unionなので、それをswitchして、1つのジェネリック関数で整数、浮動小数点数、structを別々に処理できます。

switch (@typeInfo(T)) {
    .int => {},
    else => {},
}

整数のビット幅を調べる

型が整数の場合、その情報にはbitsや符号の有無などのフィールドが含まれます。これにより、正確なビット幅に合わせてロジックを調整できます。

const bits = @typeInfo(u16).int.bits;

リフレクションでコードをジェネリックに保つ

型をハードコードせずに調べることで、1つの関数で多くの入力型を正しく処理できます。これがZigのreflectionの核心です。✨

すべてコンパイル時に行う

リフレクションの組み込み機能はすべてビルド中に実行されるため、完成したプログラムのrun-timeオーバーヘッドはゼロです。

structのフィールドを列挙する

structでは、@typeInfoによってfields配列が公開されます。この配列をコンパイル時にループして、各フィールドの名前と型を読み取れます。

const fields = @typeInfo(Point).@"struct".fields;

確認問題

ジェネリック関数の内部に値xがあり、その型を知りたいとします。どの組み込み機能を使いますか?

まとめ

@TypeOfで値の型を知り、@typeInfoでその構造を調べます。その情報で分岐すれば、1つの関数を多くの型に対応させられます。🎯

無料で開始

AI チューターと学ぶ Zig — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
30
レッスン
120

よくある質問

「@TypeOfと型リフレクション」レッスンは無料ですか?

はい。「@TypeOfと型リフレクション」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Zig Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Zig Academyコースには全4レッスンが含まれています。

「@TypeOfと型リフレクション」で何を学びますか?

汎用性を保つために型を調べます。 ブラウザで直接実行するハンズオンコードでZig Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Zig Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのZig Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「@TypeOfと型リフレクション」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このZig Academyレッスンでコードを書いて実行できますか?

はい。すべてのZig Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

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

  1. 型を受け取る関数
  2. ジェネリックなデータ構造
  3. @TypeOfと型リフレクション
  4. anytypeパラメーター
← Zig Academyに戻る