0Pricing
Zig Academy · レッスン

値渡しと参照渡し

引数が関数に渡される仕組みを学びます。

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

引数の渡り方

関数を呼び出すと、Zigはデータを関数内に渡す必要があります。方法は2つあり、値そのものを渡すか、値への参照を渡します。🚚

値渡しではコピーされる

デフォルトでは、プリミティブ型の引数は値渡しされます。関数は独自のコピーを受け取るため、元の値を変更できません。

fn addOne(n: i32) i32 {
    return n + 1;
}

コピーは独立している

コピーなので、関数内での変更が呼び出し元に影響することはありません。外側の変数は、元の状態のままです。

パラメーターは不変

Zigの関数パラメーターは不変です。関数本体内でパラメーターに再代入できないため、意図が明確になります。

ポインターを渡して共有する

関数からデータを変更できるようにするには、ポインターを* Tの形で渡します。関数はコピーではなく、実際の値を操作します。

fn bump(n: *i32) void {
    n.* += 1;
}

デリファレンスしてアクセスする

関数内では.*を使って、ポインター経由で値を読み書きします。n.* += 1とすると、呼び出し元が保持している値が更新されます。

&でアドレスを取得する

呼び出し側では、&を使ってアドレスを渡します。これにより、bump(&count)で関数からcountを直接変更できます。

var count: i32 = 0;
bump(&count); // count is now 1

大きなデータには参照が適している

大きな構造体をコピーするのは非効率的です。constポインターを渡せば、変更を許可せずに低コストでデータを共有できます。

fn area(r: *const Rect) i32 {
    return r.w * r.h;
}

constポインターは読み取り専用

*const Tを使うと、関数はデータを読み取れますが、書き込むことはできません。安全性を保ちながら高速に処理できます。

スライスはすでにビュー

スライスは[]const u8のように、ポインターと長さを保持します。そのため、全体をコピーせずに基になるデータを共有できます。

意図に応じて選ぶ

小さく読み取り専用のデータには値渡しを使い、変更が必要な場合やデータが大きい場合はポインターを渡します。

クイックチェック

関数から呼び出し元の変数を変更したいとします。どのパラメーター形式を使えばよいでしょうか?

まとめ

値はコピーされるため元の値を変更できませんが、ポインターなら共有できます。変更には*Tを使い、大きなデータを高速に読み取るには*const Tを使います。🎯

よくある質問

「値渡しと参照渡し」レッスンは無料ですか?

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

「値渡しと参照渡し」で何を学びますか?

引数が関数に渡される仕組みを学びます。 ブラウザで直接実行するハンズオンコードでZig Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「値渡しと参照渡し」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. 関数の構文と戻り値の型
  2. 値渡しと参照渡し
  3. pub関数と可視性
  4. 再帰と複数の戻り値
← Zig Academyに戻る