我看过很多优秀的Javascript库都添加了空格,如下所示:
( foo === bar ) // bad according to JSHint
不要这样做:
(foo === bar) // good according to JSHint
说实话,我更喜欢第一种方式(更多空格),因为它使代码更易读。是否有强烈的理由偏爱第二种方式,这也是JSHint推荐的方式?
( foo === bar ) // bad according to JSHint
不要这样做:
(foo === bar) // good according to JSHint
说实话,我更喜欢第一种方式(更多空格),因为它使代码更易读。是否有强烈的理由偏爱第二种方式,这也是JSHint推荐的方式?
这个声明有两个部分:“它非常易读;”,“并且遵循JavaScript祖先语言中绝大部分格式约定”。它非常易读,并且遵循JavaScript祖先语言中绝大部分格式约定。
- 编程语言不是为计算机阅读,而是为人们阅读
- 在英语中,我们从左到右,从上到下阅读
- 遵循英语语法中已经确立的规范,将使更多使用英文编码的程序员更容易阅读代码
注意:我仅就英语语言进行论述,但可能适用于许多拉丁语系语言。
通过删除副词perfectly,我们可以缩小第一句话的范围,因为它暗示了没有改进的空间。相反,我们应该关注留下来的内容:"它是可读的"。事实上,我们可以使用JS创建一个变量:"isReadable"作为布尔值。
问题
这个问题提供了两个选择:
( foo === bar )
(foo === bar)
(foo===bar)
if ( foo === bar ) { } ;
if(foo === bar){};
if(foo===bar){};
例子:"Howareyou?" 和 "How are you ?"
如果我们在许多 JS 示例后继续问这个问题,我们可能会发现可接受空格的平均限制,这可能接近英语语法规则。
但首先,让我们继续讨论 JS 中括号的另一个例子:函数!
function isReadable(one, two, three){};
function examineString(string){};
examineString(isReadable(string));
examineString( isReadable( string ));
examineString( isReadable( string ) ) ;
但像这样examineString( isReadable( string ));
或者这样examineString( isReadable({ string: string, thing: thing });
如果我们使用英语语法规则,那么我们会在“(”前加上空格,我们的代码将是...examineString (isReadable (string));
examineString(); // yes; examineString (): // no;
既然我们并不完全遵循英语语法, 但英语语法确实要求断开, 那么在括号之间添加空格或许可以让我们更接近1, 从而达到更易读的效果?
我会把这个问题留给你们, 但请记住基本问题:
"这个改变让它更易读还是更难读?"
这里有一些例子来支持我的观点.
假设函数和变量已经被声明...
input.$setViewValue(setToUpperLimit(inputValue));
这样写是一个正确的英语句子吗?
input.$setViewValue( setToUpperLimit( inputValue ));
更接近1?
config.urls['pay-me-now'].initialize(filterSomeValues).then(magic);
或者
config.urls[ 'pay-me-now' ].initialize( fitlerSomeValues ).then( magic );
(运算符就像我们一样的空格)
你能想象没有运算符周围的空格吗?
var hello='someting';
if(type===undefined){};
var string="I"+"can\'t"+"read"+"this";
我的工作内容是...
我会在 ()
、{}
和 []
之间加上空格,例如下面这些例子:
function hello( one, two, three ){
return one;
}
hello( one );
hello({ key: value, thing1: thing2 });
var array = [ 1, 2, 3, 4 ];
array.slice( 0, 1 );
chain[ 'things' ].together( andKeepThemReadable, withPunctuation, andWhitespace ).but( notTooMuch );
在技术层面上,鲜有任何理由支持其中一种 - 几乎全部原因是主观的。
对我来说,我会使用第二种格式,简单地因为:
它可读性良好,并遵循了Javascript祖先语言中绝大部分的格式约定。
JS文件的下载大小很重要[虽然可以通过代码压缩解决此问题]。
我总是这样做的。
引用《JavaScript编程语言的代码约定》中的内容:
除了
.
(句号)和(
(左括号)以及[
(左方括号)之外,所有二元运算符都应该与其操作数用一个空格分开。
以及:
函数名和其参数列表的
(
(左括号)之间不应该有空格。
我更喜欢第二种格式。然而,也有编码风格标准坚持使用第一种格式。考虑到javascript通常作为源代码传输(例如任何客户端代码),与其他语言相比,可以看出它在这方面略微更强一些,但只是稍微而已。
我发现第二种更易读,你发现第一种更易读,既然我们不在同一份代码上工作,我们应该各自按自己的喜好去做。如果你和我合作,那么最好选择一种格式而不是混合使用(比任何一种格式都难以阅读),但是在javascript出现之前(在类似C的其他语言中),这样的问题就存在了很久,每种格式都有其优点。
我使用了 JSHint 来检查这段代码片段,但它并没有给出这样的建议:
if( window )
{
var me = 'me';
}
我大部分时间使用第二种(无空格)风格,但是如果有嵌套的括号,特别是嵌套的方括号,我会加上空格,因为我发现它们比嵌套的圆括号(括号)更难读。或者换句话说,我会开始任何给定的表达式而不加空格,但如果我发现它很难读,我会插入一些空格进行比较,并且如果它们有帮助,我会留下它们。
关于JS Hint,我不会担心-这个特定的建议更多是一个观点问题。由于这个问题,你不太可能引入错误。
标准很重要,我们应该遵循它们,但不是盲目地。 对我来说,这个问题关乎语法样式应该全部围绕可读性。
this.someMethod(toString(value),max(value1,value2),myStream(fileName));
this.someMethod( toString( value ), max( value1, value2 ), myStream( fileName ) );
对我来说,第二行显然更易读。
最终,问题可能归结为个人偏好,但我会问那些喜欢第一行的人,他们是因为“习惯了它”还是真正相信它更易读。
如果这是你习惯的东西,那么为了长期受益,短时间的不适可能值得尝试。