Zig Academy · レッスン

実践で学ぶdeferとerrdeferの違い

常に実行する処理とエラー時だけ実行する処理を選びます。

レッスン 3/413 ステップ

「実践で学ぶ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フィードバックを取得できます。ローカル設定は不要です。

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

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