true
の場合は「はい」、 の場合は「いいえ」false
、または の場合は「NA」 (または実際には他の文字列)を返す何かを書きたいことがよくありnil
ます。現在、私はこれを行います:
@contact.boolean ? 'Yes' : (@contact.boolean.nil? ? "NA" : "No")
これはこれを書くための最短の方法ですか?
true
の場合は「はい」、 の場合は「いいえ」false
、または の場合は「NA」 (または実際には他の文字列)を返す何かを書きたいことがよくありnil
ます。現在、私はこれを行います:
@contact.boolean ? 'Yes' : (@contact.boolean.nil? ? "NA" : "No")
これはこれを書くための最短の方法ですか?
ここに1つのアイデアがあります:
> {true => "Yes", false => "No", nil => "N/A"}[true]
=> "Yes"
だから、もちろん、あなたはそうするでしょう{true => "Yes", false => "No", nil => "N/A"}[value]
かなり。2 つの異なる値を返す演算子を使用して 3 つの異なる値を返そうとしているため、二重の ternery が必要です。
オブジェクトに true または false を格納する必要がありますか? 「はい」または「いいえ」を保存できませんか?もしそうなら、そしてあなたのプロパティがブール値よりも良いものと呼ばれると仮定すると、あなたは単純に書くことができます
@contact.correct? || "(NA)"
3 項式の true/false テストを 1 回通過すると、読むときに理解しにくくなります。それはメンテナンスの問題につながります。case
ステートメントに移動することをお勧めします。
case @contact
when true
'Yes'
when false
'No'
when nil
'(NA)'
end
他の言語では、連鎖した 3 項ステートメントが読みやすくなります。Perl では複雑なチェーンが使用されます。これは、何が起こっているのかを簡単に確認できる方法で簡単に構築できるためです。これを書く代わりに:
$contact == true ? 'Yes' : contact == false ? 'No' : '(NA)';
あなたはそれを書くことができます:
$contact == true ? 'Yes'
: contact == false ? 'No'
: '(NA)';
これは、コードを読んでいる人にとって、ロジックに関する視覚的なヒントです。
それをメソッドに移動するのはどうですか?なぜ短くする必要があるのですか?それをメソッドに移動すると、それを呼び出すだけで済みます。