Tow*_*wer 142 javascript
我曾经听说过将花括号留在单行语句中可能会对JavaScript产生不利影响.我不再记得推理了,谷歌搜索也没多大帮助.在JavaScript中用花括号括起所有语句是否有任何好处?
我问,因为每个人似乎都这样做.
Jos*_*h K 177
但他们是推荐的.如果你扩展声明,你将需要它们.
这完全有效
if (cond)
alert("Condition met!")
else
alert("Condition not met!")
Run Code Online (Sandbox Code Playgroud)
但是,强烈建议您始终使用大括号,因为如果您(或其他人)扩展了语句,则需要使用大括号.
所有使用支撑的C语法风格语言都遵循相同的做法.C,C++,Java,甚至PHP都支持一行语句,没有大括号.你必须意识到你只保存了两个角色,而且有些人的支撑风格你甚至都没有保存一条线.我更喜欢全支撑式(如下),所以它往往会更长一点.由于您具有非常清晰的代码可读性,因此可以很好地满足这种权衡.
if (cond)
{
alert("Condition met!")
}
else
{
alert("Condition not met!")
}
Run Code Online (Sandbox Code Playgroud)
Rud*_*udu 87
有一个可读性方面 - 因为当你有复合语句时,它会变得非常混乱.(缩进有帮助,但对编译器/解释器没有任何意义)
var a;
var b;
var c;
//Indenting is clear
if (a===true)
alert(a); //Only on IF
alert(b); //Always
//Indenting is bad
if (a===true)
alert(a); //Only on IF
alert(b); //Always but expected?
//Nested indenting is clear
if (a===true)
if (b===true)
alert(a); //Only on if-if
alert (b); //Always
//Nested indenting is misleading
if (a===true)
if (b===true)
alert(a); //Only on if-if
alert (b); //Always but expected as part of first if?
//Compound line is misleading
//b will always alert, but suggests it's part of if
if (a===true) alert(a);alert(b);
else alert(c); //Error, else isn't attached
Run Code Online (Sandbox Code Playgroud)
然后有一个可扩展性方面:
//Problematic
if (a===true)
alert(a);
alert(b); //We're assuming this will happen with the if but it'll happen always
else //This else is not connected to an if anymore - error
alert(c);
//Obvious
if (a===true) {
alert(a); //on if
alert(b); //on if
} else {
alert(c); //on !if
}
Run Code Online (Sandbox Code Playgroud)
(我们的想法是,如果你总是有括号,那么你就知道在该块中插入其他语句).
pea*_*rth 51
这个问题在一行上询问有关陈述的问题.然而,提供的许多示例显示了不基于多行语句省略括号的原因.如果这是您喜欢的编码风格,那么在一行上不使用括号是完全安全的.
例如,问题是否可以:
if (condition) statement;
Run Code Online (Sandbox Code Playgroud)
它不会问这是否可以:
if (condition)
statement;
Run Code Online (Sandbox Code Playgroud)
我认为将括号括起来是更可取的,因为它使代码更易读,语法更少.
我的编码风格是永远不要使用括号,除非代码是一个块.并且永远不要在一行上使用多个语句(以分号分隔).我发现这很容易阅读和清楚,并且从未在'if'语句中出现范围问题.因此,在单个if条件语句中使用括号将需要3行.像这样:
if (condition) {
statement;
}
Run Code Online (Sandbox Code Playgroud)
使用一行if语句是首选,因为它使用较少的垂直空间并且代码更紧凑.
我不会强迫其他人使用这种方法,但它对我有用,我不能不同意提供的关于如何省略括号导致编码/范围错误的示例.
Can*_*ner 15
技术上没有,但绝对是的!
忘记"这是个人偏好","代码运行得很好","它一直对我很好","它更具可读性"yada yada BS.如果你犯了一个错误,这很容易导致非常严重的问题并且相信我在你编码时很容易犯错误(不要相信?,查看着名的Apple会失败的bug).
争论:"这是个人喜好"
不它不是.除非你是一个离开火星队的单人队,否则没有.大多数时候会有其他人阅读/修改您的代码.在任何严肃的编码团队中,这将是推荐的方式,因此它不是"个人偏好".
争论:"代码运行得很好"
意大利面条代码也是如此!这是否意味着可以创建它?
争论:"它对我来说一直很好"
在我的职业生涯中,由于这个问题我已经看到了很多错误.你可能不记得你评论了多少次,'DoSomething()'并为什么'SomethingElse()'被称为困惑:
if (condition)
DoSomething();
SomethingElse();
Run Code Online (Sandbox Code Playgroud)
或添加'SomethingMore'并且没有注意到它不会被调用(即使缩进意味着其他情况):
if (condition)
DoSomething();
SomethingMore();
Run Code Online (Sandbox Code Playgroud)
这是我的真实例子.有人想要关闭所有日志记录,以便运行find&replace "console.log"=> //"console.log":
if (condition)
console.log("something");
SomethingElse();
Run Code Online (Sandbox Code Playgroud)
看到问题?
即使你认为,"这些都是微不足道的,我永远不会这样做"; 请记住,总会有一个团队成员的编程技能低于你(希望你不是团队中最糟糕的!)
争论:"它更具可读性"
如果我已经学习了任何有关编程的知识,那就是简单的事情会很快变得非常复杂.这很常见:
if (condition)
DoSomething();
Run Code Online (Sandbox Code Playgroud)
在使用不同的浏览器/环境/用例进行测试或添加新功能后,将变为以下内容:
if (a != null)
if (condition)
DoSomething();
else
DoSomethingElse();
DoSomethingMore();
else
if (b == null)
alert("error b");
else
alert("error a");
Run Code Online (Sandbox Code Playgroud)
并将其与此进行比较:
if (a != null) {
if (condition) {
DoSomething();
}
else {
DoSomethingElse();
DoSomethingMore();
}
} else if (b == null) {
alert("error b");
} else {
alert("error a");
}
Run Code Online (Sandbox Code Playgroud)
PS:奖励积分转到谁注意到上面例子中的错误.
wil*_*alo 11
没有可维护性问题!
你们所有人的问题在于你到处都是分号.多个语句不需要花括号.如果要添加语句,只需使用逗号即可.
if (a > 1)
alert("foo"),
alert("bar"),
alert("lorem"),
alert("ipsum");
else
alert("blah");
Run Code Online (Sandbox Code Playgroud)
这是有效的代码,将按您的预期运行!
除了@Josh K(也适用于Java,C等)提到的原因之外,JavaScript中的一个特殊问题是自动分号插入.来自维基百科的例子:
return
a + b;
// Returns undefined. Treated as:
// return;
// a + b;
Run Code Online (Sandbox Code Playgroud)
因此,如果像这样使用,这也可能产生意想不到的结果:
if (x)
return
a + b;
Run Code Online (Sandbox Code Playgroud)
写作并不是真的好多了
if (x) {
return
a + b;
}
Run Code Online (Sandbox Code Playgroud)
但也许在这里错误更容易检测(?)
Yog*_*gi 7
总是发现
if(valid) return;
Run Code Online (Sandbox Code Playgroud)
对我的眼睛来说更容易
if(valid) {
return;
}
Run Code Online (Sandbox Code Playgroud)
也有条件的,比如
(valid) ? ifTrue() : ifFalse();
Run Code Online (Sandbox Code Playgroud)
更容易阅读(我个人的意见)而不是
if(valid) {
ifTrue();
} else {
ifFalse();
}
Run Code Online (Sandbox Code Playgroud)
但我想这取决于编码风格
| 归档时间: |
|
| 查看次数: |
79000 次 |
| 最近记录: |