使用jshint坚持最大长度设置



我看到了一些关于在编写javascript时坚持最大80个字符的行长度的建议,例如Google、npm、Node.js、Crockford。然而,在某些情况下,我看不出如何最好地做到这一点

MongoClient.connect('mongodb://localhost:27017/sampleDatabase', function(err, database) {
  if(err) {
    throw err;
  }
  db = database;
});

这将抛出一个jshint警告,因为它超过了80个字符。现在,在这种情况下,你会选择忽略警告,还是选择这样的解决方案

MongoClient.connect('mongodb://localhost:27017/sampleDatabase', 
     function(err, database) {
       if(err) {
         throw err;
       }
      db = database;
     }
 );

如果您可以重用url变量,Andy是一个不错的选择。如果是一次性的,就像通常这样的电话一样,我可能会做这样的事情。。。

/*jslint sloppy:true, white:true, browser: true, maxlen:80 */
/*global MongoClient */
var dbErrHand, db;
dbErrHand = function(err, database) {
    if(err) {
        throw err;
    }
    db = database;  // Killing me with the global spaghetti!  ;^)
};
MongoClient.connect(
    'mongodb://localhost:27017/sampleDatabase', 
    dbErrHand
);

这样,您的代码更具表现力,并且您知道要连接的数据库是什么,尽管Andy只需要将var url更改为var mongoSampleDb或类似的内容即可获得同样的优势。

我喜欢把函数拉出来,这样你就可以直观地理解它们是相当离散的逻辑块,尽管我意识到如果你把它放在connect调用中自己的行上,它在这里不会超过80个字符。会认为该代码也可以在您的应用程序中重复使用。

拉出函数也是一个很好的习惯,这样就不会意外地在循环中生成函数[1]

当然,还有一种可能性是,你最终还是会有超长的绳子,不得不做一些类似。。。

MongoClient.connect(
    'mongodb://whoLetFredNameThisServerBecauseItsTooLong.FredsCompany.com:27017'
        + '/sampleDatabase', 
    dbErrHand
);

嵌套代码中良好的空白使问题更加严重,这可能对Andy在任何循环/ifs/嵌套代码之外设置这样的变量的想法来说是+1。在某种程度上,关闭maxlen可能是值得的

但是括号处理是最主观的决定之一,尤其是在JavaScript中,那里没有一个好的先验答案。有些人对我的每行代码的参数感到疯狂,或者更喜欢(在自己的行上,就像这样。。。

MongoClient.connect
(
    'mongodb://localhost:27017/sampleDatabase', 
    dbErrHand
);

令人惊讶的是,JSLint仍然让你有足够的自我表达空间!;^)

[1]裙带关系问题链接提醒,尽管这是我在谷歌上搜索的第一个。可能是谷歌将我的结果偏向于我的一个例子。

我会将url分离成一个新的变量。

var url = 'mongodb://localhost:27017/sampleDatabase';
MongoClient.connect(url, function(err, database) {
  if(err) {
    throw err;
  }
  db = database;
});

最新更新