我看过很多像这样编写的代码;
conditional_value = if thing_is_true
true_value
else
other_value
end
我对此感到矛盾。一方面,使用条件(或任何其他语法块,如开关,开始/结束,循环,甚至函数定义)的返回值来减少冗余并清楚地表明代码正在做什么是很好的。另一方面,压痕经常是混乱和混乱。
作为第二种可能性,如果一个人决定将所有线条缩进到第一行开头的水平,那就会破坏整个结构的视觉提示。
conditional_value = if thing_is_true
true_value
else
other_value
end
这是依赖换行的第三种选择(至少在Ruby中);
conditional_value =
if thing_is_true
true_value
else
other_value
end
第四种选择是咬住子弹并将赋值语句放在每个分支中。
if thing_is_true
conditional_value = true_value
else
conditional_value = other_value
end
我担心这会成为一个“意见”问题,但我认为事实我不知道;
答案 0 :(得分:3)
我只会分配三元运算符val = condition ? true_value: false_value
的结果,而不是if
表达式的值。这可能只是来自Java / C / C ++的习惯,但是使用if
这种方式似乎可能会使流控制与表达值混淆。上面的第四个选择就是这种风格。
但是如果你有一致的风格,包括使用if
的值,那也很好。
答案 1 :(得分:0)
我认为这肯定会使读者更清楚的是当代码从赋值开始时代码的意图。也就是说,如果我正在调试该代码并且我已经知道从条件分配的变量本身就是行为(即:不是bug的来源),那么我可以完全跳过整个块,而不需要花费大脑周期来计算如果那里有副作用。
在没有简洁if else
格式的语言中,它肯定会变得很麻烦,但是在具有三元运算符(? :
)和合理操作顺序的语言中(读取:不是PHP),I非常喜欢这种风格也适用于任意嵌套的条件:
var x = someCondition ? a
: somethingElse ? b
: anotherThing ? c
: d;