openとcloseを組み合わせる
リソースを対称的に取得・解放します。
「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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- deferが保証すること
- 複数のdeferの実行順序
- 実践で学ぶdeferとerrdeferの違い
- openとcloseを組み合わせる