程序员A只喜欢一些三元运算符,尤其是嵌套运算符。更好的是,他声称它们使代码更易于阅读和维护,因为它们可以适应更少的线路。程序员B争辩说,嵌套三元组时可读性会丢失,反过来代码也难以维护。
查看下面的栏目:
private int MyFunction(bool condA, bool condB)
{
// Programmer A says:
// Nested ternary --> This is easier to read and maintain because it is on one line. Ternaries can be nested 4 or 5 deep and it is no problem.
return condA ? condB ? 20 : -10 : -20;
// Programmer B says:
// Unwrapped --> This is more readable as it better describes the step by step evaluation of the conditions and their results.
if (!condA) { return -20; }
if (!condB) { return -10; }
return 20;
}
其他人对这两种思想流派有何看法?最好的方法是什么?
编辑: 还有更好的方法吗?
答案 0 :(得分:8)
显然,程序员A将“短”代码与“可维护和可读”代码混淆。
答案 1 :(得分:4)
我会在任何一天选择程序员B.聪明的代码只是为了成为聪明的代码通常很难理解和保持,这占你在工作时看屏幕的时间的70%以上。
程序员的B方式很简单,很容易出错。
答案 2 :(得分:3)
我认为最好的解决方案是保留三元运算符,但为其添加括号
return condA ? ( condB ? 20 : -10 ) : -20;
否则可能会很容易混淆。
或者,混合方法可能是最好的,其中三元运算符仅出现在最后一层嵌套上。
if(condA)
{
return condB ? 20 : -10;
} else {
return -20;
}
答案 3 :(得分:2)
首先,它显然是主观的 - 我很想投票以这些理由关闭这个问题。但是,我认为仍然会有一些不太主观的富有成效的观点。
我会用不同的方式编写它,但仍然使用条件运算符。我会用这个:
return !condA ? -20
: !condB ? -10
: 20;
换句话说,在每种情况下将“简单”情况作为第二个操作数 - 这样我们就可以在每一行上看到“如果这个条件成立,则返回值就是那个”。这样它看起来更像第二个代码,但它有点terser。 (而且我不喜欢像那样在同一条线上使用大括号 - 当你展开那些if
块时,它会非常宽松。)
答案 4 :(得分:1)
在我看来,行数并不是可读性的指标。你可以把很多crazy stuff放到一行中,但这并不意味着这条线对每个人都很明显。
我尽量避免使用三元运算符(除了真的琐碎的情况),因为将这些行解析为程序员的费用远远高于节省的空间。
对于嵌套语句(例如您的示例)尤其如此。
示例:对我来说,一个简单的案例就像是
_foo = (bar != null) ? bar : String.Empty;
答案 5 :(得分:0)
我倾向于同意,如果你可以将代码放在一行而不会失去易读性,那就是好的做法。
我喜欢三元运算符,因为它们确实会使代码变得更短,但它们通常需要更长时间才能理解。
嵌套的三元运算符永远不会在我监督的任何项目中占有一席之地。代码必须优先考虑易读性,嵌套的三元操作在我看来是一个太过分了。
答案 6 :(得分:0)
这很简单。使用括号。