用語の種類
言語仕様プロパティー関数・メソッド
大分類
技術用語
連想する用語
最終更新日
2024/01/10 11:58
参考文献
DOWNLOAD
ゆめみ iOS 研修との関連
学習の難易度
B 概念の理解が必要
学習の重要度
B 専門性の高い場面で必要
公式のドキュメントには次のように、クロージングオーバーとして知られていると記載があるものの、あまり情報が出てきません。 Swift では、クロージングオーバーにより値を保持し続けることができる強力な仕組みになっています。
This is known as closing over those constants and variables. Swift handles all of the memory management of capturing for you.
クロージングオーバーで検索すると熊谷さんの回答が一番先頭に表示されています。
https://teratail.com/questions/292334
クロージングオーバーを体感してもらうには、ドキュメントに記載されているクロージャを用意して実際に動かしてみるとその強力さがわかりやすいです。
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 として同じような振る舞いをするようです。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures
const counter = (function () {
let privateCounter = 0;
function changeBy(val) {
privateCounter += val;
}
return {
increment() {
changeBy(1);
},
decrement() {
changeBy(-1);
},
value() {
return privateCounter;
},
};
});