Zig Academy · レッスン

deferが保証すること

スコープ終了時にコードを実行します。

レッスン 1/413 ステップ

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

信頼できるクリーンアップ

ほとんどすべてのプログラムは、後で閉じなければならないものを開きます。Zigには、クリーンアップを決して忘れないための defer があります。

defer の動作

defer 文は、それを含むスコープがどのように終了しても、スコープの終了時に実行するコードを登録します。

defer cleanup();

すぐにクリーンアップを書く

重要な考え方は、リソースを取得する行のすぐ隣にクリーンアップの行を書くことです。こうすれば、2つが離れてしまうことはありません。

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

スコープの終了時に実行される

deferしたコードはすぐには実行されません。そのコードが属するスコープが終了するまで待ち、その時点で実行されます。

{
    defer cleanup();
    work();
}

どの終了経路でも動作する

スコープが通常どおり終了する場合でも、途中で早期にreturnする場合でも、deferしたコードは実行されます。抜け道はありません。

defer file.close();
if (bad) return error.Oops;

エラーでもスキップされない

関数の後半にある try がエラーを返した場合でも、deferはすでに登録されているため、終了時に実行されます。

呼び出しだけでなく任意の文に使える

deferにはブロックを含む任意の単一文を指定できるため、複数のクリーンアップ手順をまとめられます。

defer {
    free(buf);
    log("done");
}

関数以外のスコープ

deferはそれを囲むスコープに結び付きます。そのスコープは関数全体だけでなく、ループ本体やifブロックの場合もあります。

while (more()) {
    defer step();
}

手動で追跡する必要がない

deferがなければ、すべての分岐で閉じることを覚えておく必要があります。deferを使えば、コンパイラーがクリーンアップを実行するため、どの経路も忘れずに済みます。

上から下へ読める

取得とクリーンアップが近くにあるため、コードを明確な流れとして読めます。開く、使う、そして閉じることがすでに保証されている、という流れです。

リソース安全性を支える定番ツール

ファイル、メモリの割り当て、ロックなど、defer はZigプログラムをリークなく整理された状態に保つ、日常的なツールです。

確認問題

deferした文は実際にはいつ実行されますか。

まとめ

defer について学びました。取得処理のそばにクリーンアップを書けば、Zigはすべての経路でスコープ終了時に実行されることを保証します。🧹

無料で開始

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

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

コース
30
レッスン
120

よくある質問

「deferが保証すること」レッスンは無料ですか?

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

「deferが保証すること」で何を学びますか?

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

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

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

「deferが保証すること」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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