虽然我意识到每种语言都有自己的缩进惯例,但我不禁对最近发现的东西感到恼火。请考虑PHP手册中的以下代码:
switch ($i) {
case "apple":
echo "i is apple";
break;
case "bar":
echo "i is bar";
break;
case "cake":
echo "i is cake";
break;
}
请注意,每个案例都是从switch语句缩进的。这是有道理的,因为代码更容易阅读,并且块的主体包含在其中的一个级别。
但是,当我在JSLint中测试等效的JavaScript switch语句时:
switch (i) {
case "apple":
alert("i is apple");
break;
case "bar":
alert("i is bar");
break;
case "cake":
alert("i is cake");
break;
}
...它显示一个错误,告诉我它应该像这样:
switch (i) {
case "apple":
alert("i is apple");
break;
case "bar":
alert("i is bar");
break;
case "cake":
alert("i is cake");
break;
}
这似乎违反直觉,因为现在每个案例都与交换机块本身内联。我无法想象为什么这会被认为更好,更不用说触发错误了。
JSLint是错误的,还是仅仅遵循惯例?如果后者是真的,为什么公约不能缩小以澄清?
这是你的代码。格式化你想要的方式。使用jsLint,但如果您不同意其建议可以改进您的代码,请不要实现它们。 jsLint伤害了你的感情。
在Crockford的书中,他指出块不会引入新的范围。 “JSLint期望具有函数的块,if,switch,while,for,do和try语句,以及其他任何地方。”
还有那个
if (condition){
statements;
}
是推荐的做块的方法;因为它“更有弹性”。我非常怀疑它的结构是错误的。
只要您的缩进可以在逻辑上合理,您应该以您喜欢的样式缩进。如果JSLint真的抱怨这个,那么它就过于迂腐了。
虽然格式化很重要,但最终它是您的格式。按你喜欢的方式做。您选择的特殊风格是个人选择,许多风格可以“很好”。但是,任何“好的”格式化样式必须一致 - 选择您喜欢的规则和 坚持下去。
对我来说,如何辩论如何放置{与前面的代码在同一条线上,或者围绕着一个“拥抱花括号”这样的事情,这很有趣 else
。我认为只有共产主义者才能和他们一样{在同一条线上 if
声明。 :)
这只是JS的惯例(因为JSLint定义了约定)。就个人而言,我认为PHP在这里是错误的(如果手册遵循任何类型的约定,dunno,我知道标准库没有)。我更喜欢JS风格,因为如果你在几个嵌套的块中它会变得非常讨厌。例如(PHP代码):
class Foo{
function Bar($arr) {
foreach($arr as $item) {
switch ($item) {
case "foo":
// Do something
break;
// You get the idea
最终,你的选择。我不会将PHP手册用作样式指南;如果您不能为不同的语言使用不同的样式,请使用定义良好的JS样式。
额外的空格在解释时会用JavaScript和PHP解析,因此您可以根据需要使代码变得丑陋。我个人更喜欢在我的switch语句中添加额外的花括号,这样我就不会错过掉线错误:
switch ($someVar)
{
case 'value':
{
//your code here
} break;
case 'something':
{
//more code here
}
case 'something else':
{
//some more code here
} break;
default:
{
//default code here
} break;
}
扫描结束括号中的代码允许我检查是否添加了正确的break语句。你可以看到 'something'
case缺少一个break语句(也许是故意的,也许是一个错误)。
有些人不同意这种格式,但这正是我所得到的。格式并不重要。解析器非常宽容。找到适合你的东西并坚持下去。
这是他的Java背景泄露。 JSLint方式模仿了 切换案例的官方Java约定。我更喜欢你的第一个例子,但我正在学习容忍JSLint方式。
我也发现这很令人困惑,并在道格拉斯克罗克福德找到了这个理由 JavaScript编程语言的代码约定 在 http://javascript.crockford.com/code.html
子句(case,catch,default,else,finally)不是语句和
所以不应该像语句那样缩进。