単純なコマンドとして、「If do-this」と「do-this」のルビイディオムはありますか?
たとえば、私は現在やっています
object.method ? a.action : nil
else 句を空のままにしますが、最後に nil を指定する必要のない、より慣用的な方法があると思います。(また、この場合、複数行のコードを取り上げるのは無駄だと思います。
単純なコマンドとして、「If do-this」と「do-this」のルビイディオムはありますか?
たとえば、私は現在やっています
object.method ? a.action : nil
else 句を空のままにしますが、最後に nil を指定する必要のない、より慣用的な方法があると思います。(また、この場合、複数行のコードを取り上げるのは無駄だと思います。
原則として、Ruby では三項演算子はほとんど必要ありません。Cでそれが必要な理由は、Cではif
ステートメントであるため、値を返したい場合は式である三項演算子を使用する必要があるためです。
Ruby では、すべてが式であり、ステートメントがないため、三項演算子はほとんど不要です。いつでも交換できます
cond ? then_branch : else_branch
と
if cond then then_branch else else_branch end
したがって、あなたの例では:
object.method ? a.action : nil
と同等です
if object.method then a.action end
@Greg Campbellが指摘するように、これは末尾のif
修飾子フォームと同等です
a.action if object.method
また、Ruby のブール演算子は単にtrue
orfalse
を返すだけでなく、最後に評価された式の値を返すため、制御フローに使用できます。これは Perl からインポートされたイディオムで、次のようになります。
object.method and a.action
a.action if object.method?
グレッグの答えは最高ですが、記録のために、そしてCよりもさらに、式とステートメントはRubyで同等であるため、a.action if o.m?
次のようなこともできます。
object.method? && a.action
あなたは書くことができ(a; b; c) if d
ます
(a
b
c
) if d
またはそのことについて:(x; y; z) ? (a; b c) : (d; e; f)
Rubyには、単一のステートメントまたは式のみが許可される状況はありません...
result = (<expression> && <true value>) || <false value>
value = 1
result = (value == 1 && 'one' ) || 'two'
result #=> 'one'
説明: value == 1 && 'one' #=> は最後の式の結果を返します。値は 1 に等しいため、セクションが評価され、'one' が返されます。
value = 0
result = (value == 1 && 'one' ) || 'two'
result #=> 'two'
説明: 値 != 1 および 'and' 式は評価されませんが、代わりに 'or' 式が使用され、'two' が返されます。