Get Notion free

クロージングオーバー (Closing Over)

言語仕様
プロパティー
関数・メソッド
技術用語
2024/01/10 11:58
Empty
Empty
Empty
B 概念の理解が必要
B 専門性の高い場面で必要
8 more properties
公式のドキュメントには次のように、クロージングオーバーとして知られていると記載があるものの、あまり情報が出てきません。 Swift では、クロージングオーバーにより値を保持し続けることができる強力な仕組みになっています。
This is known as closing over those constants and variables. Swift handles all of the memory management of capturing for you.
クロージングオーバーで検索すると熊谷さんの回答が一番先頭に表示されています。
クロージングオーバーを体感してもらうには、ドキュメントに記載されているクロージャを用意して実際に動かしてみるとその強力さがわかりやすいです。
func makeIncrementer(forIncrement amount: Int) -> () -> Int { var runningTotal = 0 func incrementer() -> Int { runningTotal += amount return runningTotal } return incrementer }
次のように呼ぶと、クロージャ内の
runningTotal
がクロージングオーバーにより、保持され続けて、 10, 20, 30 と前の結果を引き継いで計算可能になっています。
let incrementByTen = makeIncrementer(forIncrement: 10) incrementByTen() // -> 10 incrementByTen() // -> 20 incrementByTen() // -> 30

他言語

JavaScript

JavaScript の Closure にも Closure scope として同じような振る舞いをするようです。
const counter = (function () { let privateCounter = 0; function changeBy(val) { privateCounter += val; } return { increment() { changeBy(1); }, decrement() { changeBy(-1); }, value() { return privateCounter; }, }; });