ページ

2012/05/01

本当は(きっと)怖くないクロージャ

最近 iPhone アプリに挑戦していて、Objective-C とかいう一風変わった言語を勉強しています。
Appleワールドでしか生きられない言語のためによくわからない言語仕様をネットでちまちま調べてるほど暇じゃねーよと
最近は詳解 Objective-C 2.0 第3版を買ってセコセコと読んでいます。とても重いです。内容的にも重量的にも。

やっとブロックオブジェクトの章まで読み進めたら
Block は、「他のプログラミング言語ではクロージャ(closure)として知られている言語機能に相当」とか書かれていて、
( ´・∀・`)ヘーなんだークロージャのことかー全くこの言語は同じ事柄に対して別の名前がついてて大変だぜェー

で、クロージャ(closure)って何?

よく考えたらクロージャがなんなのか知りません。正直プログラミングClojureとゴッチャになってました。
わからないことはとりあえずググります。
クロージャ - Wikipedia
クロージャ(クロージャー、closure、閉包)はプログラミング言語における関数の一種。
引数以外の変数を実行時の環境ではなく、自身が定義された環境(静的スコープ)において解決することを特徴とする。
本当にありがとうございました(?)

望みは絶たれたかと思ったがWikipediaの外部リンクにJavaScript 猿でもわかるクロージャ超入門という文字が!
僅かな望みをかけてリンクをクリック!Wikipediaのとどめの一撃に対して思うことに共感!
段階を踏んで一歩ずつ理解していけるのでオススメです。

とりあえずなんとなく、こういうこと↓だと理解しました。だいたいあってるらしいです。


えぇ、思い返せば関数の呼び出し回数を管理する変数を泣く泣くグローバル変数にして
気持ち悪いなーどうにかならないのかなーと思っていましたが、それを解決できるのがクロージャらしいです。
何か恐ろしいもののように仰々しく説明されるからよくわからなくて怖かったクロージャですが、
ホントは怖くなくて、身近な問題を解決できる便利なヤツでした。

浅い理解で間違ったことを書いているかもしれないので、タイトルはカッコ書きで…きっと(;´∀`)
なにか間違っていたら指摘してくださいね!

追記:どうやら上のツイートの用途だけじゃないみたいです。