次の Ruby コードを短くし、同時に読みやすくすることはできますか?
height = do_some_calc
height = 128 if height == 0
次の Ruby コードを短くし、同時に読みやすくすることはできますか?
height = do_some_calc
height = 128 if height == 0
height = 128 if 0 == height = do_some_calc
do_some_calc
一度だけ評価する必要がある場合、それが私が知っている唯一の方法です。
do_some_calc
0 の代わりに false または nil を返すように変更する意思がある場合は、問題ありません。
height = do_some_calc || 128
do_some_calc が通常は 0 を返すときに false または nil を返すように変更できない場合は、それをラップできますが、長期的には多くの文字を節約できません。デフォルトを設定する場所がたくさんある場合を除いて。
do_some_calc が 0 を返した場合、このラッパーは false を返し、それ以外の場合は do_some_calc の出力を返します。
def my_do_some_calc
temp = do_some_calc
temp != 0 && temp
end
すべてをまとめると、次のようになります。
height = my_do_some_calc || 128
短いですか?機能しないでください。
height = (h = do_some_calc).zero? ? 128 : h
のように:
def do_some_calc
rand 100
end
10.times do
height = (h = do_some_calc).zero? ? 128 : h
puts height
end
# >> 3
# >> 95
# >> 89
# >> 82
# >> 31
# >> 4
# >> 82
# >> 99
# >> 11
# >> 64
たぶん、次のようなものです:
STANDARD_HEIGHT = 128
def do_some_calc
height = 0
#calculate our height...
height = height == 0 ? STANDARD_HEIGHT : calculated_height
end
には、より多くのコンテキストを指定する必要があると思います128
。したがって、定数です。またdo_some_calc
、それが 0 に等しい場合、実際には に等しいはずであるという事実を隠す必要があると思いますDEFAULT_HEIGHT
。
編集:あなたの暗黙の質問(私がそのように編集したもの)に答えるために、do_some_calc
長くすることで短くすることができます.
次のようにできます
height = do_some_calc.zero? ? 128 : do_some_calc
非常に読みにくい場合でも、これは技術的には短くなります。
(height = do_some_call) == 0 and height = 128
あなたのやり方が最も簡潔で読みやすいようです。