クロージャって何がいいの?at TECH
クロージャって何がいいの? - 暇つぶし2ch291:デフォルトの名無しさん
14/12/17 21:39:32.52 JUumI3zm.net
>>282
でれでは、ここまでの結論をまとめてみる
まず最初は。>>289 の評価結果から:
[Python:X]
  Python の lambda 構文は式しか書けないという制限があるから、
  クロージャ固有の局所環境を持つことができない
  したがって、Python の lambda 構文は「関数型言語のクロージャ」ではない
[Ruby:X]
  Ruby のブロックはオブジェクトであるから、
  その評価にはメソッド Proc#call をコールしなければならない
  したがって、Ruby のブロックは「関数型言語のクロージャ」ではない
[JavaScript:O]
  JavaScript の関数リテラルは任意の書けるからクロージャ固有の局所環境を持てるし、
  なおかつ引数に適用するだけで評価できる
  したがって、JavaScript の関数リテラルは「関数型言語のクロージャ」である
  結果として、最も忠実に「関数型言語のクロージャ」が実装されている(>>277)、と言える

続けて、この評価結果が現実のプログラミングに与える影響をまとめる
ここでは Apple 公式リファレンスに含まれる Swift クロージャのサンプルコードを「お題」とした(>>191)
・高階関数 map に与えるクロージャをインラインで書ける
  [Python:X]
  ・インラインでは関数再帰を使った可読性の低いコードになってしまう(>>208)
  ・このため、一般には(インラインで書くのはあきらめて)関数定義を使わざるをえない
  [Ruby & JavaScript:O]
  ・インラインで自然な while ループを使った(ふつうのプログラマにとって)分かりやすいコードが書ける
・参照透明性のある関数型プログラミングで書ける
  [Python:X] 関数再帰で書けるが、可読性の低いコードになってしまう(>>208)
  [Ruby:O] (関数再帰の代わりに)組み込みの高階関数風メソッドを使うことで、可読性の高いコードが書ける(>>267)
  [JavaScript:?] (書けるか否か、現時点では不明)


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch