web-dev-qa-db-ja.com

Ruby複数行の3項式?

私はこのようなものを変換しようとしています:

if condition?
   expression1 line 1
   expression1 line 2
   expression1 line 3
else 
   expression2 line 1
end

三項に対して、私の質問は、複数の行を1つの行の1つの式にどのように配置するかです。 Javaのようにセミコロンで区切りますか?このような?

condition? expression1 line 1; expression1 line 2; expression1 line 3 : expression2
16
matt lao

式は括弧で囲む必要があります。

condition ? (expression1 line 1; expression1 line 2; expression1 line 3) : expression2

これにより、コードの可読性が低下することに注意してください。読みやすさを向上させるには、if/elseステートメントを使用することをお勧めします。 Rubyコードを確認するときに使用したいリソースの1つは、 コミュニティスタイルガイド です。冒頭の段落で述べているように:

このRubyスタイルガイドは、現実世界のRubyプログラマーが、他の現実世界で維持できるコードを記述できるように、ベストプラクティスを推奨していますRubyプログラマー。

お役に立てれば

14
ptierno
Rubyでは、改行をセミコロンに置き換えることが常に可能であるため、実際には、プログラム全体を1つの長い巨大な行に書き込むことができます。それが読みやすさと保守性に良いかどうかにかかわらず、私はそれをあなたに任せます。 (注:優先順位が一致しない場合は、グループ化のために括弧を挿入する必要がある場合があります。)条件式を1行で記述する方法は次のとおりです。ifcondition?次に、expression1行1;式1行2; expression1 line 3 else expression2 line 1 end
27
Jörg W Mittag

これは、複数の行で3項を表現できます。

condition ?
  expression 1 :
  expression 2

もちろん、複数の式にはセミコロンを使用する必要があります(角かっこは問題ありません)。

これをしないでください。 ifステートメントに固執します。

14
Grocery

三項演算子には、単一の命令ブロックが必要です。これは、括弧を使用して指示をグループ化することを意味します

condition = true
condition ? (puts("this"); puts("is"); puts("true")) : puts("this is false")

または開始/終了ブロック内。

condition = true
condition ? begin puts("this"); puts("is"); puts("true") end : puts("this is false")

結果を達成するための単純でクリーンな方法がないという事実は、三項演算子が実際には複数のステートメント用に設計されていないことを伝える必要があります。 ;)

この場合は使用しないでください。標準のif/elseを使用します。

6
Simone Carletti