2012-04-22 17 views
2

私は現在The Ruby Programming Languageを読んでおり、else文が適切ならばRuby-esqueの読み方がわかりません。次のような通常のif-else文で2番目のコードブロックにルビコードを書くのを手伝ってもらえますか?他の条件文がある場合は「Ruby-esque」

if some_condition 
    return x 
else 
    return y 
end 

私は確信しているこれらのルビーコードです。

minimum = if x < y then x else y end 

max = x > y ? x : y 

ありがとうございます!

+1

「あなたは私のような正規のif-else文で次の書き込みを助けることができますこの?" - 私はこの質問を理解していません。 –

+0

私は質問を言い換えました。 :) –

答えて

5

RubyはFunctional Programmingのパラダイム、つまりからすべてを表現しているため、の値を返します。これは、Javaなどの言語が本当に(:

public boolean test() { 
    boolean x = if (1 > 2) { false; } else { true; }; 
    return x; 
} 

単に構文的に有効でないなど)をサポートしていないアイデア、条件文のためにも当てはまります。

あなたはRubyのターミナルでこれを見ることができます:

will_be_assigned_nil = false if (1 > 2) # => nil 
will_be_assigned_nil # => nil 

だから、あなたの質問に。 最初のものは、次のように書き換えることができます。

if x < y 
    mininum = x 
else 
    minimum = y 
end 

第二は、他の言語での三項演算子のようなものです、と同等です:

if x > y 
    max = x 
else 
    max = y 
end 

言語のルーツ&遺産を覚えておくと便利です彼らの構造を理解しようとするとき。 RubyはPerlとの哲学を共有しており、慣用的なRubyコードはしばしば優雅さを重視しています。

「表現後」のスタイルの条件文は、これの良い例です。私は私の方法の開始時にガード表現を持っている場合、それは私が書くことのために珍しいことではありません。

raise "Pre-condition x not met" unless x # (or "if !x" , preference thing) 
raise "Pre-condition y not met" unless y # etc., etc. 

代わりの

if !x 
    raise "Pre-condition x not met" 
end 
if !y 
    raise "Pre-condition y not met" 
end 
+0

ありがとうございました! –

+0

私はもう少し背景を与えた、それが役に立つことを願って:) – andrewdotnich

関連する問題