从控制流(ifs,switch)分配好的风格?

时间:2013-11-25 22:41:01

标签: coding-style variable-assignment indentation

我看过很多像这样编写的代码;

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

我担心这会成为一个“意见”问题,但我认为事实我不知道;

  • 这些款式多久出现在专业代码中?
  • 人们阅读有多容易?
  • 这些样式中的任何一种都会导致错误吗?
  • 这些样式以何种方式维护或破坏代码视觉呈现的完整性?

2 个答案:

答案 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;