Zig Academy · レッスン

anytypeパラメーター

ダックタイピングであらゆる引数を受け取ります。

レッスン 4/413 ステップ

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

anytypeで何でも受け取る

型をまったく名前で指定したくない場合もあります。パラメーターをanytypeとして宣言すると、Zigが引数から型を推論します。🦆

fn show(x: anytype) void {}

呼び出し時に型が推論される

anytypeでは、先頭に型パラメーターを置きません。呼び出し側の引数ごとに、その特殊化で使う具体的な型が決まります。

show(42);
show(true);

これはダックタイピング

Zigは、渡された引数に対して本体の演算が機能するかだけを確認します。必要な形をしていれば使えます。これがduck typingです。

必要なら型を取得する

関数内部で@TypeOfを使って型を取得し、ローカル変数や戻り値に利用することもできます。

fn dup(x: anytype) @TypeOf(x) {
    return x;
}

出力向けヘルパーに最適

さまざまな形に対応する関数ではanytypeが活躍します。Zig自体のprintも、フォーマットする引数のanytypeタプルを受け取ります。

std.debug.print("{any}\n", .{x});

制約は本体から決まる

明示的なインターフェースはありません。本体でx.lenを呼び出すなら、実際にlenフィールドを持つ引数だけがコンパイルできます。

fn size(x: anytype) usize {
    return x.len;
}

エラーは特殊化ごとに発生する

本体で処理できない型を呼び出し側が渡すと、Zigはそのcall siteでエラーを報告し、失敗した正確な型を示します。

comptimeで入力を検証する

より分かりやすいエラーにするには、早い段階で@typeInfoを使って型を調べ、コンパイル時のチェックで正しくない形を拒否できます。

anytypeとcomptime T: type

型をあらかじめ名前で指定する必要がある場合はcomptime T: typeを使い、推論と柔軟性を重視する場合はanytypeを使います。

実行時コストもゼロ

ほかのZigのジェネリックと同様に、anytype関数はコンパイル時に特殊化されるため、推論による柔軟性が実行時のコストになることはありません。

anytypeと名前付きの型を組み合わせる

1つの関数で両方のスタイルを組み合わせられます。柔軟な入力にはanytypeパラメーターを使い、固定データには通常の型付きパラメーターを使います。

fn join(sep: u8, x: anytype) void {
    _ = sep;
    _ = x;
}

確認問題

fn show(x: anytype)と書いた場合、Zigはxの具体的な型をどのように決定しますか?

まとめ

anytypeキーワードを使うと、パラメーターは任意の引数を受け取れます。型は推論され、本体は呼び出しごとに検査されます。これがZigの柔軟なダックタイピングです。🎯

無料で開始

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

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

コース
30
レッスン
120

よくある質問

「anytypeパラメーター」レッスンは無料ですか?

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

「anytypeパラメーター」で何を学びますか?

ダックタイピングであらゆる引数を受け取ります。 ブラウザで直接実行するハンズオンコードでZig Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「anytypeパラメーター」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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