0Pricing
Zig Academy · レッスン

@Typeによる型の構築

プログラムから新しい型を構築します

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

@typeInfo の逆

@typeInfo が型をデータに変換するのに対し、@Type はデータを実際の型に戻します。この2つを組み合わせると、コンパイル時に型を組み替えられます。🛠️

Type.Info 値を渡す

@Type は std.builtin.Type 値を受け取り、それが表す具体的な型を生成します。説明を渡すと、型が返されます。

const T = @Type(.{ .Int = .{ .signedness = .unsigned, .bits = 8 } });

整数型を構築する

上の例では u8 をゼロから構築しています。bits を 16 に変更すると u16 になり、すべてコンパイル中に決定されます。

const U16 = @Type(.{ .Int = .{ .signedness = .unsigned, .bits = 16 } });

型を往復変換する

@typeInfo に型を渡してから @Type を呼び出すと、まったく同じ型が返されます。これは、2つの組み込み関数が完全な逆関数であることを示しています。

const Same = @Type(@typeInfo(u32));

Structをデータとして記述する

Structを構築するには、StructField 配列に値を設定します。各フィールドには、名前、型、アラインメント、デフォルトポインターが必要です。

const f = std.builtin.Type.StructField;

Structのペイロードを組み立てる

フィールドをレイアウトと is_tuple フラグを持つ .Struct ペイロードでラップし、その全体を @Type に渡します。

const info = .{ .Struct = .{
    .layout = .auto,
    .fields = my_fields,
    .decls = &.{},
    .is_tuple = false,
} };

新しいStruct型を生成する

そのペイロードに @Type を呼び出すと、手作業で記述するのではなく、自分のロジックによって構築されたまったく新しいStruct型が得られます。

const Generated = @Type(info);

デフォルト値にはcomptimeポインターが必要

フィールドの default_value は、値へのオプショナルなconstポインターです。デフォルト値がない場合は null になります。このポインターは comptime で既知でなければなりません。

const dv: ?*const anyopaque = &@as(u8, 0);

Enumなどを構築する

同じ方法はStruct以外にも使えます。.Enum ペイロードを使うと、計算によって求めたメンバー一覧から @Type がEnum型を生成できます。

型を構築する理由

生成型はシリアライザーやORMで役立ちます。設定や行のpacked型を手作業で編集する代わりに、自動的に導出できます。✨

リフレクションと組み合わせる

最も強力なパターンは、@typeInfo で型を読み取り、データを変換し、@Type で新しい型を再構築する方法です。フィールドの追加などに使えます。

確認問題

Structを記述する std.builtin.Type の値があります。これを使用可能な型に変換するには、何を使いますか?

まとめ

@Type は Type.Info データから実際の型を構築し、@typeInfo の逆の働きをします。両者を組み合わせて、型の読み取り、変換、再生成を行えます。🎯

よくある質問

「@Typeによる型の構築」レッスンは無料ですか?

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

「@Typeによる型の構築」で何を学びますか?

プログラムから新しい型を構築します ブラウザで直接実行するハンズオンコードでZig Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「@Typeによる型の構築」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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