Ruby on rails 使用散列而不是条件散列的缺点是什么?
为了使代码更具声明性,我喜欢实现的一种模式是替换长条件,如下所示:Ruby on rails 使用散列而不是条件散列的缺点是什么?,ruby-on-rails,ruby,refactoring,Ruby On Rails,Ruby,Refactoring,为了使代码更具声明性,我喜欢实现的一种模式是替换长条件,如下所示: def make_a_decision(value) if value == 1 "One" elsif value == 2 "Two" elsif value == 3 "Three" end end def make_a_decision(value) { 1 => "One", 2 => "Two", 3 => "Three" }[val
def make_a_decision(value)
if value == 1
"One"
elsif value == 2
"Two"
elsif value == 3
"Three"
end
end
def make_a_decision(value)
{ 1 => "One",
2 => "Two",
3 => "Three"
}[value]
end
使用如下哈希:
def make_a_decision(value)
if value == 1
"One"
elsif value == 2
"Two"
elsif value == 3
"Three"
end
end
def make_a_decision(value)
{ 1 => "One",
2 => "Two",
3 => "Three"
}[value]
end
我喜欢这样做,因为它用一个只需要响应[]
的对象来替换条件。在我看来,它也更容易阅读,部分原因是散列的干燥性质
不过,我没有看到其他红宝石商这么做。为什么不呢
我一直都是这样做的。除此之外,我将引用散列设置为冻结类常量(例如,
FOO\u MAPPING
),只需执行FOO\u MAPPING[value]
。主观上,我发现它可读性较差。客观地说(除非Ruby对其进行优化),每次调用函数时都会重新定义哈希对象。从我所看到的模式来看,这种模式非常常见,我经常使用它,但它是一个常量,而不是一个方法。我有时也会这样做,但也可以使用case
注意,对于哈希,通过为1添加默认值()或proc(),可以模拟if…end
子句中的else
子句。将散列提取到冻结常量中。两个人。学一点红宝石。三个人。意大利面比普通的散列更难重构。4.干燥总是一件好事。五,<如果不是散列,则应使用code>case(散列仍然是这里的最佳方法。)elsif
非常phpish。纯清除散列只允许引入相等。此外,哈希而不是条件显然不是rubysh。这里是一个关于干:。此外,如果必须以任何方式更改此结构、引入嵌套条件或添加一些其他检查,您将非常头疼。这个散列只是通过映射来转换值的一种方法,但是如果我们不得不添加一些东西,而不是简单的一对一转换,那么它将失败。