我正在开展一个项目。目前我有一个相当大的条件语句,它根据一些输入参数为变量赋值。所以,我有类似的东西。
if some condition
x = some value
elsif another condition
x = a different value
...
重构这个的最佳方法是什么?我希望我最终会得到像
这样的东西x = some value if some condition || another value if another condition
这种事情有没有模式?
答案 0 :(得分:11)
只需将作业放在if。
之外x = if some condition
some value
elsif another condition
a different value
或者你可以使用哈希。
x = dict[some condition]
答案 1 :(得分:1)
条件语句也是一个表达式,因此,如果变量在每个条件中相同,那么您可以做的第一件事就是:
x = if cond1
expr1
elsif cond2
expr2
....
end
如果条件是单个表达式的所有状态,则可以使用case语句使其更整洁。
然而,下一个最明显的重新分解练习是将大条件分离到一个方法中,该方法应该提供评估所有条件和表达式所需的最小数据。
E.g。
# Where conditional is currently, and x assigned, assuming the conditionals
# need a couple of variables . . .
x = foo param1, param2
# Elsewhere
private
def foo p1, p2
if cond1
expr1
elsif cond2
expr2
....
end
end
答案 2 :(得分:0)
这不是一种模式,而是一种运营商。你指的是三元运算符:
If Condition is true ? Then value X : Otherwise value Y
以下是一个例子:
speed = 90
speed > 55 ? puts("I can't drive 55!") : puts("I'm a careful driver")
使用三元语句简短,甜蜜,并且完成工作。
答案 3 :(得分:0)
x = some condition ? some value :
another condition ? a different value : ...
答案 4 :(得分:0)
如果您想重构代码清晰度和灵活性,请考虑replacing conditional with polymorphism重构。
在你的问题中没有足够的细节来进一步提出建议,但是这个重构将使你的代码库更能抵抗变化。如果你收到一个新的要求,打破条件并修改它是不好的形式(更容易引入错误,更难做);最好创建一个可以插入现有代码库的新对象。这种灵活性是Open/Closed Principle(SOLID首字母缩略词中的“O”)所描述的。