2

私は現在、The Ruby Programming Languageを読んでいますが、Ruby 風の if else ステートメントを正しく読む方法がわかりません。このような通常の if-else ステートメントの 2 番目のコード ブロックで、以下の ruby​​ コードを書くのを手伝ってくれませんか?

if some_condition
  return x
else
  return y
end

というわけで、私がよくわからないルビコードはこれらです。

minimum = if x < y then x else y end

max = x > y ? x : y  

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

4

1 に答える 1

6

Ruby が関数型プログラミングのパラダイムから取ったアイデアを利用するのが難しいと思われる両方の形式: つまり、すべては式であり、したがって value を返します。これは、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

2 番目は、他の言語の三項演算子に似ており、次と同等です。

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
于 2012-04-22T23:32:11.277 に答える