Swiftを勉強していて、クロージャという言葉が出てきました。
クロージャってなんだろ?
クロージャ
くろーじゃ
closure!!
closure:閉鎖
。。。なるほど、
何かを閉じ込めているのか!
言葉の意味を調べるとなんとなくわかった気がしてきます。
最近『Swift実践入門 直感的な文法と安全性を兼ね揃えた言語』
を読みました。
![]() Swift実践入門 [ 石川洋資 ]
|
そこには、クロージャは特殊なものではなくとても広い概念であるとの旨の内容が記されていました。
なんと関数もクロージャであるらしいのです。
func swift() { }
関数の基本的な構造はこんな感じですよね。
ここの{}の中には様々な記述がされ、{}の中の全ての記述はその関数の一部です。
この{}こそがクロージャの正体なのではないか?
{}という大きなくくり
{}で様々な記述をくくり、一つにまとめる文法を総じて『クロージャ』と呼ぶのです。
よって関数もクロージャに入るのです。
『関数も』
ということは当然、関数以外の使い方もあります。
なんと、定数に代入したりできるのです!!
例を挙げてみます。
定数aaaにクロージャを代入してみました。
String型の引数『x』に”ファイト!”を入れています。
let aaa = { (x: String) -> String in return x + "ガンバルンバ" } aaa("ファイト!") // ”ファイト!ガンバルンバ”
すごくシンプルですが、イメージはしやすいのではないでしょうか。
もう少し別の書き方を紹介します。
変数bbbにクロージャを入れ込むことを宣言して、
あとで実際に入れ込んでいます。
こっちの方が少し難しいですよね。
//クロージャーを変数に入れ込むことの宣言 var bbb: (String) -> String //実際に入れ込んでいる bbb = { (y: String) -> String in return y + "どっこいや" } bbb("3")//”3どっこいや”
さらに引数や戻り値を省力した書き方を紹介します。
変数を宣言するときに引数の型や戻り値の型は定義できているので、
実際にクロージャを代入するときには、記述する必要はありませんね!(時と場合によりますが・・・)
//上の省略形(引数の型や戻り値の型を省略) bbb = { y in return y + "swift" } bbb("6")
以上、
今回はクロージャの紹介でした