PHPのマニュアルを英語版で読むと次のようになっています。
日本語 | 英語 |
---|
無名関数 | anonymous functions |
匿名関数 | anonymous functions |
クロージャー | closures |
ぶっちゃけ、無名関数も匿名関数も英語では同じです。ただ、日本語版PHPマニュアルの用語として次のように使い分けているようです。
- 無名関数 … function式を使ってネイティブに作成するanonymous functions、
Closure
クラスで実装
- 匿名関数 …
create_function()
関数を使ってラムダ形式で作成するanonymous functions、eval()
関数で実装、古い方法でセキュリティ上のリスクがあるため使用は非推奨
PHPではanonymous functionsについて二つの異なる実装(性質も異なる)があったため、日本語ではわかりやすくするために用語を分けたのだ考えらます。英語で区別して呼びたい場合は、無名関数をnative anonymous function、匿名関数をanonymous (lambda-style) functionsとしているようです。
PHP以外の言語ではanonymous functionsの実装は(書き方が複数あったとしても)一つしかない場合がほとんどです。そのため、訳者によって無名関数や匿名関数と呼んだりしていますが、実質どれも同じanonymous functionsを示します。
残りのクロージャーですが、日本語では関数閉包とも呼ばれています。しかし、これは関数の一種と言うより、ある種の関数に対する性質(技術※)です。言語によってはanonymous functionsだからといってクロージャーの性質を持つとは限りませんし、Rubyのようにanonymous functionsとは呼ばないものでもクロージャーの性質を持つ物があります。しかし、紛らわしいことに、このクロージャーの性質を持つような関数そのものを__クロージャー__と呼ぶことがあります。
※ Wikipedia[en]:Closure (computer programming)ではclosuresをある種のtechniquesとしています。
PHPについては、無名関数はクロージャーの性質を持っているため、いわゆる__クロージャー__と呼ばれることもあるということです。少し混乱するのは、PHPにはClosure
クラスが存在し、このClosure
クラスが無名関数の実装として使われています。クロージャーの性質を持つ無名関数を実装するクラスであるからClosure
という名前にしたのだと思われます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/10/27 00:35
退会済みユーザー
2016/10/27 04:40 編集