Swift part2
■ このスレッドは過去ログ倉庫に格納されています
0868デフォルトの名無しさん
2014/07/19(土) 01:01:05.54ID:eaRnxt2Eいや、
「Python には(匿名関数参照はあるけれど)クロージャは存在しない」
というのが正しい
クロージャは単なるラムダ式ではなくて「局所環境」という概念を含む
局所環境とは、対象とするクロージャ内部だけで有効な変数や関数の宣言を意味する
Python のラムダ式の構文ではその定義に純粋な式しか許さず、なおかつ
関数型言語における let 式や where 節に相当する局所宣言構文が存在しない
だから、変数宣言を含むコードを関数の引数やリターン値として(=第一級市民として)扱いたい
場合には、ラムダ式(=匿名関数)は役に立たず、わざわざ名前のついた関数を宣言しなければならない
これに対して、まともなクロージャを備えるモダンな Swift/C#/Lisp/JavaScript/Ruby といった
言語では、クロージャ内部で局所変数を宣言できるから、たとえばソート・ライブラリ関数の
引数として渡す複雑な比較処理を、クロージャ内部のコードとして簡潔に表現できる
(なおクロージャという概念は、言語によってラムダ式/無名関数/ブロック等と名称が異なる)
結果として、プログラマは C# の LINQ や JavaScript の jQuery のような関数型プログラミングを
基礎としたメソッド・チェーンを何の苦も無く自在にプログラミングできている
(おそらく Swift でもクロージャを積極的に活用したプログラミング技法の情報が溢れるようになる)
まとめると、
「クロージャの欠落したPython は(手続き型言語だから)関数型プログラミングには適さない」
と言える
■ このスレッドは過去ログ倉庫に格納されています