トップページ > プログラム > 2014年11月19日 > eeZRz+g3

書き込み順位&時間帯一覧

10 位/236 ID中時間01234567891011121314151617181920212223Total
書き込み数1000000000000000000010215



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
リーダブルコーディング技術スレ
クロージャって何がいいの? [転載禁止]©2ch.net
Ruby 初心者スレッド Part 55

書き込みレス一覧

リーダブルコーディング技術スレ
212 :デフォルトの名無しさん[sage]:2014/11/19(水) 00:41:55.06 ID:eeZRz+g3
>>211
hash = data.empty() ? INVALID_HASH : ComputeHash(data);
リーダブルコーディング技術スレ
217 :デフォルトの名無しさん[sage]:2014/11/19(水) 20:19:45.26 ID:eeZRz+g3
>>214
>ちなみに複数行にわたる時はどうします?

hash = data.empty() ? (
    INVALID_HASH
  ) : (
    ComputeHash(data)
  ) ;

理屈は >>215、いわゆる参照透明性のことで、
関数型言語や Ruby のような関数型プログラミングに適した言語ならではのコード
・Rubyによる関数型プログラミング
 http://www.h6.dion.ne.jp/~machan/misc/FPwithRuby.html

なお Ruby には C と同様な条件演算子(三項演算子)もあるけど、
複数行にわたる場合には if 式を使うのが普通

hash = if data.empty()
    INVALID_HASH
  else
    ComputeHash(data)
  end
クロージャって何がいいの? [転載禁止]©2ch.net
150 :デフォルトの名無しさん[sage]:2014/11/19(水) 22:27:12.37 ID:eeZRz+g3
>>144,147
それだと doHoge の実行中に例外が発生するとファイルがクローズされない

たとえばクロージャを多用する Ruby のような言語だと、以下のように書く
 File.open(..) do |file|
   doHoge do
     file.puts(msg)
   end
 end
Ruby ではクロージャをブロックと呼ぶけど、ブロック実行中に例外が発生しても
ファイルは確実にクローズされるし、ユーザ定義メソッドでも同様な振る舞いを実装できる


>>146
それに対して、クロージャを持たない手続き型言語の Pascal や Python といった言語では、
同じ事をするのに(>>146 のような) with 構文を使わなければ書けない
クロージャは一級市民だから引数で渡したり呼び出すことができるという自由があるけど、
with 構文はあくまで文(statement)だからクロージャと比較すれば表現力は制限される
いわばクロージャという概念を持たない言語の代用品が with 構文である

なおJavaScript はクロージャと with 構文のどちらも持っているけど、
書籍 "JavaScript: Good Parts" だとクロージャは Good Parts に
with 構文は Bad Parts に分類されている
Ruby 初心者スレッド Part 55
823 :デフォルトの名無しさん[sage]:2014/11/19(水) 22:28:07.63 ID:eeZRz+g3
>>822
アンチRubyの悲痛な叫びが心地よい
クロージャって何がいいの? [転載禁止]©2ch.net
155 :デフォルトの名無しさん[sage]:2014/11/19(水) 23:57:41.67 ID:eeZRz+g3
クロージャと with 構文のどちらも持っている言語であれば、
ケースバイケースで可読性や好みで使い分ければいいのではないかと

問題はクロージャを持たない、あるいは
「世間一般のクロージャの要件(>>104)」を満たせない言語では、
with 構文という(クロージャと比べて)不自由な代用品を使わざるをえない
という話


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。