deferの仕組み
どの経路でもスコープ終了時にコードを実行します。
「deferの仕組み」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。
defer の動作
defer ブロックは、現在のスコープをどのように終了する場合でも、スコープを抜ける直前にコードを実行するよう予約します。
func demo() {
defer { print("cleanup") }
print("work")
}
demo()スコープの終了時に実行される
defer されたコードは、スコープ内の残りの処理が終わった後、制御がスコープを抜ける直前に実行されます。
func greet() {
defer { print("goodbye") }
print("hello")
}
greet()通常の流れの後に defer する
文が複数ある場合でも、defer の本体は最後に実行されます。
func process() {
defer { print("3 deferred") }
print("1 start")
print("2 middle")
}
process()ループ内のdefer
ループ本体内のdeferは、各反復の終了時に実行されます。
for i in 1...3 {
defer { print("end of iteration", i) }
print("start of iteration", i)
}if内のdefer
スコープは任意のブロックにできます。if内のdeferは、そのifブロックが終了するときに実行されます。
func check(_ flag: Bool) {
if flag {
defer { print("leaving if block") }
print("inside if")
}
print("after if")
}
check(true)現在の値のキャプチャ
deferブロックは変数を参照でキャプチャするため、実行された時点の値を参照します。
func counterDemo() {
var count = 0
defer { print("final count:", count) }
count = 5
}
counterDemo()deferは処理を遅延させない
deferは非同期には実行されません。スコープを抜けるときに同期的に実行され、関数が呼び出し元に戻る前に完了します。
func order() {
defer { print("B") }
print("A")
}
order()
print("C")よくある用途:セットアップと後処理の対応付け
後処理をセットアップのすぐ隣に記述すると、両者を見た目の上でも論理的にも対応付けておけます。
func session() {
print("open session")
defer { print("close session") }
print("do work")
}
session()doブロック内のdefer
doブロック内のdeferは、そのブロックを抜けるときに実行されます。
func run() {
do {
defer { print("do block cleanup") }
print("inside do")
}
print("after do")
}
run()defer内の複数の文
deferブロックには複数の文を含められ、それらはすべてスコープを抜けるときにまとめて実行されます。
func multi() {
defer {
print("step 1 of cleanup")
print("step 2 of cleanup")
}
print("main work")
}
multi()deferを使う理由
deferを使うと、スコープがどのように終了しても後処理が必ず実行されるため、経路によって後処理を忘れる可能性を減らせます。
func guaranteed() {
defer { print("always runs") }
print("body")
}
guaranteed()確認問題
deferの実行タイミングを確認します。
まとめ
deferは、スコープがどのように終了しても、現在のスコープの最後にコードを実行するようスケジュールします。同期的に実行され、スコープ内では最後に実行されるため、後処理をセットアップの近くに置くのに適しています。
func demo() {
defer { print("last") }
print("first")
}
demo()よくある質問
「deferの仕組み」レッスンは無料ですか?
はい。「deferの仕組み」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。
「deferの仕組み」で何を学びますか?
どの経路でもスコープ終了時にコードを実行します。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Swift Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「deferの仕組み」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSwift Academyレッスンでコードを書いて実行できますか?
はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。