设置默认值的更好方法是什么?

时间:2010-11-05 03:21:05

标签: ruby code-readability

我们可以缩短以下Ruby代码,同时更具可读性吗?

height = do_some_calc
height = 128 if height == 0

6 个答案:

答案 0 :(得分:7)

height = 128 if 0 == height = do_some_calc

这是我所知道的唯一方法,如果do_some_calc必须只评估一次。

答案 1 :(得分:2)

如果你愿意改变do_some_calc以返回false或nil而不是0,那么你就是在做生意。

height = do_some_calc || 128

如果你不能改变do_some_calc以返回false或nil,它通常会返回0,那么你可以包装它,但是从长远来看你不会保存很多字符。除了您有许多地方设置默认值的情况。

如果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

答案 2 :(得分:1)

更短的?没有功能。

  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

答案 3 :(得分:0)

可能有以下几点:

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来缩短问题。

答案 4 :(得分:0)

您可以执行以下操作

height = do_some_calc.zero? ? 128 : do_some_calc 

答案 5 :(得分:-4)

如果不是非常易读,这在技术上会更短:

(height = do_some_call) == 0 and height = 128

我会说保持它的方式,你的方式似乎是最简洁和可读的。