Zig Academy · レッスン

openとcloseを組み合わせる

リソースを対称的に取得・解放します。

レッスン 4/413 ステップ

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

開いたものは必ず閉じる

リソースには、開くと閉じる、割り当てると解放する、ロックするとアンロックするという組み合わせがあります。重要なのは、それぞれの組を釣り合わせることです。

その場で組にする

Zigでは、deferを使ってcloseをopenの直後に書くのが習慣です。これにより、組が離れてしまうことはありません。

const f = try open();
defer f.close();

割り当てたらすぐに解放をdeferする

同じ考え方をメモリにも適用します。allocateした直後にfreeを登録すれば、終了時にバッファが解放されます。

const buf = try a.alloc(u8, 64);
defer a.free(buf);

ロックはアンロックする

Mutexも同じです。ロックを取得したらunlockをdeferし、途中でreturnしても必ずロックが解放されるようにします。

mutex.lock();
defer mutex.unlock();

パターンは拡張できる

複数のものを開く場合は、それぞれに独自のdeferを設定します。逆順にすることで、正しい順序で自動的に閉じることができます。

戻り値を保護する

関数がリソースを作成して返す場合は、解放処理にerrdeferを使います。成功時には保持され、エラー時にはクリーンアップされます。

const node = try a.create(Node);
errdefer a.destroy(node);

孤立したリソースを作らない

closeがopenと一緒に書かれているため、リファクタリングや分岐の追加を行っても、リソースが孤立してリークすることはありません。

監査しやすい

レビュー担当者は各openを確認し、対応するdeferをすぐに見つけられます。クリーンアップの漏れも一目で明らかになります。

対称性が目標

対称性として考えてください。取得する各行の近くに解放する行があり、deferによって両者が常に対応します。

再利用できる手順

取得し、解放をdeferし、その後で使用する。この3段階の手順は、ファイル、メモリ、ロックなど、ほぼすべてのリソースに適用できます。

厳しい状況でも安心

取得と解放を組にしておけば、早期returnやエラー処理を自由に追加しても、クリーンアップが正しく保たれると信頼できます。

確認問題

対応するcloseは通常どこに置くべきでしょうか。

まとめ

すべてのopenの次の行で、対応するcloseをdeferしてください。この対称性により、すべての経路でファイル、メモリ、ロックの対応関係が保たれます。🔐

無料で開始

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

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

コース
30
レッスン
120

よくある質問

「openとcloseを組み合わせる」レッスンは無料ですか?

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

「openとcloseを組み合わせる」で何を学びますか?

リソースを対称的に取得・解放します。 ブラウザで直接実行するハンズオンコードでZig Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「openとcloseを組み合わせる」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. deferが保証すること
  2. 複数のdeferの実行順序
  3. 実践で学ぶdeferとerrdeferの違い
  4. openとcloseを組み合わせる
← Zig Academyに戻る