使用 jshint 遵守最大长度设置
Posted
技术标签:
【中文标题】使用 jshint 遵守最大长度设置【英文标题】:Adhering to a max length setting with jshint 【发布时间】:2014-12-12 21:18:32 【问题描述】:我看到了一些关于在编写 javascript 时遵守 80 个字符的最大行长的建议,例如谷歌、npm、Node.js、克罗克福德。但是,在某些情况下,我不知道如何最好地做到这一点。举个例子
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;
);
【问题讨论】:
大多数体面的文本编辑器都可以选择在页面上以指定的字符数画一条线(在每个编辑器中它被称为不同的东西)。在记事本++中,它在设置|下编辑 |垂直边缘设置。 在崇高的文本中,您将"rulers": [80, 100, 120]
添加到您的用户首选项中。 SublimeText 也有很棒的 jshint 插件(例如 sublimelinter)。
这些标尺不只是提醒您不要碾过它们的视觉指示吗?还是他们在幕后做了什么?
不,只是视觉提示。
啊,好吧,这不是我要找的。每当我运行它时,JSHint 都会给我提示。我想看看人们实际上是如何避免排长队的。
【参考方案1】:
如果您可以重用 url
变量,Andy's 是一个不错的选择。如果是一次性的,就像这样的电话经常发生的那样,我可能会做这样的事情......
/*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
称呼。会认为该代码也可以在您的应用中重用。
拉出函数也是一个很好的一般习惯,这样你就不会意外make a function inside of a loop。[1]
而且,当然,您仍有可能最终得到非常长的字符串,并且必须执行类似...
MongoClient.connect(
'mongodb://whoLetFredNameThisServerBecauseItsTooLong.FredsCompany.com:27017'
+ '/sampleDatabase',
dbErrHand
);
嵌套代码中的良好空格会进一步加剧问题,这可能对 Andy 在任何循环/ifs/嵌套代码之外设置此类变量的想法+1。在某些时候,关闭maxlen
可能是值得的。
但是括号处理是最主观的决定之一,尤其是在 JavaScript 中,没有很好的 先验 答案。对我的每行参数代码有些恼火,或者更喜欢 (
在自己的行上,像这样......
MongoClient.connect
(
'mongodb://localhost:27017/sampleDatabase',
dbErrHand
);
令人惊讶的是,JSLint 仍然为您提供了充足的自我表达空间! ;^)
[1] 裙带关系的问题链接提醒,虽然这是我用谷歌搜索的第一个。可能是谷歌将我的结果偏向于,嗯,我的一个例子。
【讨论】:
【参考方案2】:我会将 url 分离到一个新变量中。
var url = 'mongodb://localhost:27017/sampleDatabase';
MongoClient.connect(url, function(err, database)
if(err)
throw err;
db = database;
);
【讨论】:
以上是关于使用 jshint 遵守最大长度设置的主要内容,如果未能解决你的问题,请参考以下文章
我在使用CSocket::Send(字符,长度);发送数据的时候,怎样把握长度的设置?怎么才能得到长度的最大值?