尽管有观点认为,在单行if语句中放弃花括号对于可维护性和可读性来说并不理想。
但是这个呢?
if (lemons) { document.write("foo gave me a bar"); }
它甚至更加压缩,如果展开,花括号也不会被忘记。是否存在明显的问题,如果没有,考虑的因素是什么?我觉得它还是很有可读性的,至少和三元运算符一样。在我看来,由于可读性,三元运算符不太被建议,尽管我觉得这个结论并不是很一致。
我内心的邪恶双胞胎想要建议这一点,尽管语法显然不是为它而设计的,而且可能只是一个坏主意。
(syntax) ? document.write("My evil twin emerges"): "";
我已经看到了&&操作符的短路行为,尽管不习惯的人可能会发现很难阅读,甚至称其为反模式:
lemons && document.write("foo gave me a bar");
就我个人而言,我经常使用单行,如果没有括号,就像这样:
if (lemons) document.write("foo gave me a bar");
如果我需要添加更多的语句,我将把语句放在下一行并添加括号。因为我的IDE是自动缩进的,所以这种做法的可维护性问题是没有意义的。
箭头函数示例:
let somethingTrue = true
[1,2,3,4,5].map(i=>somethingTrue && i*2)
在承诺:
Promise.resolve()
.then(_=>checkTrueFalse && asyncFunc())
.then(_=>{ .. })
否则:
if(somethingTrue) thenDo()
如果它只是一个简单的条件句,我更喜欢尽可能使用If (value),因为在语句开头的If这个词比旁听和问号更能说明正在发生的事情。
就像很多人说的,如果你在寻找一个实际的1行,那么:
if (Boolean_expression) do.something();
者优先。然而,如果你想做一个if/else,那么三元是你的朋友(也是超级酷):
(Boolean_expression) ? do.somethingForTrue() : do.somethingForFalse();
另外:
var something = (Boolean_expression) ? trueValueHardware : falseATRON;
然而,我看到了一个非常酷的例子。向@Peter-Oslson大喊&&
(Boolean_expression) && do.something();
最后,它不是一个if语句,但在循环中执行map/reduce或Promise.resolve()也很有趣。向@brunettdan喊话
如前所述,你可以使用:
& &风格
lemons && document.write("foo gave me a bar");
or
bracket-less风格
if (lemons) document.write("foo gave me a bar");
短路返回
然而,如果你希望使用一行If语句来短路一个函数,你需要使用无括号的版本,如下所示:
if (lemons) return "foo gave me a bar";
as
lemons && return "foo gave me a bar"; // does not work!
将给你一个SyntaxError: Unexpected关键字'return'
我已经看到了很多支持使用三元运算符的答案。如果a)你确实有一个替代选项,b)你从一个简单的条件返回一个相当简单的值,那么三元是很好的。但是…
最初的问题没有可供选择的选项,只有一个(实)分支的三元运算符迫使您返回一个配置好的答案。
柠檬吗?“foo给了我一个酒吧”:“谁知道你会得到什么回报”
我认为最常见的变化是柠檬?“喷火…’:”,而且,通过阅读各种语言的无数关于真、假、真、假、null、nil、空白、空的文章,你就会知道,你正在进入一个雷区(尽管是一个记录良好的雷区)。
一旦三元的任何部分变得复杂,你最好使用更明确的条件形式。
说我投票给如果还不够“foo”。