Zig Academy · レッスン

undefinedと未初期化メモリ

値が決まる前に記憶領域を確保します。

レッスン 4/413 ステップ

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

先に領域を確保する

値を入れる前に、ストレージを確保しておきたい場合があります。そのためにZigではundefinedキーワードを使います。

undefinedを使う

undefinedと書くと、メモリがreservedされたものの、まだ意味のある値を保持していないバインディングが宣言されます。すぐに値を設定することを約束する形です。

var buffer: [16]u8 = undefined;

これは約束である

undefinedは、読み取る前に実際の値を代入するという約束です。先に読み取ると、garbage、つまり未指定のビットパターンが得られます。

バッファーでよく使う

これから値を埋める固定長配列が典型的な例です。bufferのサイズを決めてundefinedのままにし、その後、要素ごとに書き込みます。

var line: [256]u8 = undefined;

安全機能が検出してくれる

DebugモードとReleaseSafeモードでは、Zigがundefinedのメモリを0xAAバイトで埋めます。この分かりやすいパターンによって、誤った早期読み取りを見つけやすくなります。

読み取る前に代入する

ルールは簡単です。undefinedのバインディングを読み取る前に、必ず実際の値をwriteしてください。先に読み取るのは、Zigが避けるよう求めているバグです。

var x: i32 = undefined;
x = 42;

undefinedはnullではない

undefinedは初期化されていないメモリを意味し、nullはoptionalにおける意図的なabsent値を意味します。両者はまったく異なる問題を解決します。

ゼロ初期化のコストを省く

大きな領域をundefinedのままにすると、不要なゼロを書き込むコストを避けられます。これは怠慢ではなく、意図的なperformance上の選択です。

フィールドもundefinedにできる

後から設定する予定なら、構造体のフィールドもundefinedで開始できます。目的は、初期化されていない状態を正直かつ明示的に表すことです。

var p: Point = undefined;

控えめに使う

ほとんどのバインディングは、最初から実際の値を保持すべきです。rawなstorageの確保が本当に必要な場合だけundefinedを使いましょう。

隠すより明示する

他の言語では、変数が暗黙的に初期化されないことがあります。Zigではそれをexplicitにするため、コードを読む人が意図を明確に理解できます。

クイックチェック

var x: i32 = undefined;と書き、代入する前にxを読み取りました。何をしてしまったのでしょうか。

まとめ

undefinedは値を持たずにストレージを確保するもので、バッファーなどでよく使うと学びました。必ず読み取る前に代入し、nullとは異なることを覚えておきましょう。📦

無料で開始

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

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

コース
30
レッスン
120

よくある質問

「undefinedと未初期化メモリ」レッスンは無料ですか?

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

「undefinedと未初期化メモリ」で何を学びますか?

値が決まる前に記憶領域を確保します。 ブラウザで直接実行するハンズオンコードでZig Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「undefinedと未初期化メモリ」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. 決して変わらない値にはconstを使う
  2. 可変状態にはvarを使う
  3. 型推論と明示的な型指定
  4. undefinedと未初期化メモリ
← Zig Academyに戻る