- 245 名前:デフォルトの名無しさん mailto:sage [2014/12/14(日) 22:48:49.10 ID:lkA9lgpO.net]
- >>241
次に、関数型プログラミングと(文の評価によって起こる)副作用との関連について まず関数型プログラミングで副作用は推奨されていない 基本的には map/filter/reduce (Ruby では map/select/inject) といった高階関数を使った (副作用の無い)参照透明性のあるコードが推奨されている これは >>244 の文書「Rubyによる関数型プログラミング」で具体的なコード例を使って解説されている おそらく誤解したのは >>191 の Swift/Ruby/JavaScript コードで while 文と ローカル変数への破壊的代入を用いていたのを見たからだと思うけど、 これは、「わざわざ」副作用を使った手続き型プログラミングほうが簡潔になる「お題」を選んだからだ 実際、副作用の代わりに再帰を使った Python コード >>208 は「普通のプログラマ」には分かりにくい (Python だけでなく、この「お題」は Ruby であっても再帰を使えば同じく分かりにくいコードになる) また(Ruby を含む)大半の手続き型言語処理系だと、TCO(末尾再帰最適化)は実装されていないか不完全である だから手続き型言語における関数型プログラミングにおいて、 再帰プログラミングには(分かりづらいだけでなく)実用上の制限があるから ツリーのような再帰的データ構造の探索問題などに限定して利用すべき(上記文書の節「再帰」を参照) これらの判断について、上記の文書では以下のように記述されている(節「おわりに」から引用): 「Rubyは基本的には命令型言語であるけれど、 関数型プログラミングへの際立った潜在能力があるのだから、 それらをいつどのように使うか(そして、いつ使わないか)を知っておくべきである。 」
|

|