実践で学ぶdeferとerrdeferの違い
常に実行する処理とエラー時だけ実行する処理を選びます。
「実践で学ぶdeferとerrdeferの違い」はCoddyKit上の無料Zig Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはZig Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Zig Academyコースには全4レッスンが含まれています。
2つのクリーンアップキーワード
Zigには2つの登録用ツールがあります。defer は常に実行され、errdeferはスコープがエラーで終了した場合だけ実行されます。
defer は常に実行される
何が起きてもクリーンアップが必要な場合は defer を使います。たとえば、関数全体で使用するために開いたファイルを閉じる場合です。
const f = try open();
defer f.close();errdefer は失敗時に実行される
errdefer は、スコープがエラーによって終了する場合だけ実行されます。正常にreturnすると、静かにスキップされます。
const buf = try alloc();
errdefer free(buf);成功時にスキップする理由
値を作成してreturnする場合があります。成功時には呼び出し元がその値を所有するため、解放してはいけません。errdeferはこの状況を適切に扱います。
作成途中のオブジェクト
errdeferはコンストラクターで特に役立ちます。後の手順が失敗すると、それまでに行った割り当てを取り消すため、作成途中のオブジェクトがリークすることはありません。
const a = try alloc();
errdefer free(a);
const b = try alloc();成功時には所有権を引き渡す
すべての手順が成功すると、関数は値を返し、errdeferは実行されません。所有権は呼び出し元へ適切に移ります。
return MyType{ .a = a, .b = b };うまく組み合わせられる
両方を組み合わせて使えます。defer は一時的な作業用メモリを処理し、errdeferは返す予定の結果を保護します。
どちらも逆順を守る
deferと同様に、複数のerrdeferも逆順に巻き戻されます。エラー時には、該当するdeferとerrdeferが新しいものから一緒に実行されます。
配置が重要
各errdeferは、保護する手順の直後に置きます。その行に到達した後に発生する失敗だけを保護するためです。
単純なルール
次の1つの質問を考えてください。このクリーンアップは成功時にも実行すべきでしょうか。はいなら defer、エラー時だけならerrdeferです。
構造的にリークを防ぐ
これらのキーワードを組み合わせると、手作業で追跡しなくても、成功時と失敗時のすべての経路でリークのない関数を書けます。
確認問題
errdeferはdeferと比べて、いつ実行されますか。
まとめ
クリーンアップを常に実行する必要がある場合はdeferを使い、エラー時の処理だけを取り消す場合はerrdeferを使います。✅
AI チューターと学ぶ Zig — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 30
- レッスン
- 120
よくある質問
「実践で学ぶdeferとerrdeferの違い」レッスンは無料ですか?
はい。「実践で学ぶdeferとerrdeferの違い」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Zig Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Zig Academyコースには全4レッスンが含まれています。
「実践で学ぶdeferとerrdeferの違い」で何を学びますか?
常に実行する処理とエラー時だけ実行する処理を選びます。 ブラウザで直接実行するハンズオンコードでZig Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Zig Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのZig Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「実践で学ぶdeferとerrdeferの違い」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このZig Academyレッスンでコードを書いて実行できますか?
はい。すべてのZig Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- deferが保証すること
- 複数のdeferの実行順序
- 実践で学ぶdeferとerrdeferの違い
- openとcloseを組み合わせる