Three.js: 重新审视风格指南?

创建于 2018-07-19  ·  16评论  ·  资料来源: mrdoob/three.js

我确定这是打开一罐蠕虫,但 [风格指南] 似乎有点过时,我想建议 2 处更改

更喜欢constletvar

我不知道为什么var是首选(在最近的 PR 中被告知要更改为 var)。 我的猜测是因为那是它开始的地方,因为constlet是新的。 但是现在代码库正在使用 ES5 模块,似乎任何保留var理由早已不复存在。 由于import行,要使代码在仅支持var的浏览器上运行,代码必须通过转译器运行。 同一个转译器已经/将已经将constletvar

此外,在var上使用constlet有具体的客观积极因素。 两者的范围都限定在大括号而不是函数范围内。 不像var那样创建全局变量。 当然,大部分代码现在都使用var (尽管 IIRC eslint 可以自动修复)。 将 linter 更改为需要constlet并慢慢更改遗留代码将防止更多错误和泄漏。 同样constlet到处都使用,可以启用 eslint 检查更多未定义的变量,这至少对我来说是一个巨大的帮助。

曾经有一段时间var更快,但那个时代已经一去不复返了。

是时候停止使用var吗?

允许在多行数组和对象中使用尾随逗号

这可能是 Doob 先生的个人偏好,但我的猜测更多的是它是 IE 时代遗留下来的。 IE 不支持尾随逗号,但现在正在进行转译,为了 IE 兼容性,转译器将删除尾随逗号。 对于开发人员来说,尾随逗号是一种胜利,因为它们会导致更少的错误。 通常被捕获但通常需要至少一次迭代才能捕获的错误,在浏览器中运行并查看语法错误然后返回并编辑逗号。 至少根据我的经验,尾随逗号避免了这个问题。

通过在多行数组和对象中拖尾逗号,我的意思是例如

 const sizes = [
     100,
     200,
     300,
 ];

 const options = {
    width: 100,
    height: 200,
    depth: 300,
};

使用尾随逗号添加或删除行只需要处理一行。 使用尾随逗号意味着始终必须知道最后一个逗号是删除或添加它。

当然,无论决定如何都可以,我会按照 PR 指南进行操作。 我只是想在代码切换到 ES5 模块时询问是否是时候重新访问一些样式指南(注意var部分实际上不在样式指南中。)

Suggestion

最有用的评论

这些天JS解释器删除了那个逗号?

除 IE 外,所有浏览器在数组和对象中使用该逗号已超过 10 年

让我补充一点,而不是将它视为奇怪的事情,另一个 POV 是语法实际上是逗号是必需的,它只是浏览器让您休息一下,不需要最后一个。 一个人的陌生,就是另一个人的美。 我发现每一行的一致性都比最后一行不同更令人愉悦。 当然,这些都是个人喜好,我只是提出了另一种看待事物的方式。

至于差异,我在网上找到了这些比较

没有尾随逗号差异添加一行

尾随逗号差异添加一行

所有16条评论

曾经有一段时间 var 更快,但那段时间已经一去不复返了。

你这是基于什么? IIRC 上次我们对此进行测试时, const没有区别,但let稍慢。 很高兴看到一些更新的测试。

允许在多行数组和对象中使用尾随逗号

如果 IE 没有问题,绝对同意此更改(我们仍然希望至少支持 IE 10 和 11,对吗?)。

曾经有一段时间 var 更快,但那段时间已经一去不复返了。

你这是基于什么? IIRC 上次我们对此进行测试时, const没有区别,但let稍慢。 很高兴看到一些更新的测试。

是的,一些数字会有助于这个决定。

允许在多行数组和对象中使用尾随逗号

通过在多行数组和对象中拖尾逗号,我的意思是例如

const sizes = [
    100,
    200,
    300,
];

我的大脑是这样读的:

 const sizes = [
     100,
     200,
     300, undefined
 ];

这些天JS解释器删除了那个逗号?

我个人不赞成在多行数组中使用尾随逗号,因为我也觉得阅读起来很不寻常。

对我来说,尾随逗号的目的是可以更快地添加和删除内容,以及通过剪切/粘贴来重新排序。 不用担心你是否只剪掉最后一项,每一行都是一样的。 至于看到undefined ,如果您知道每行只有一个项目,则很容易避免这种情况 - 并且在数组位于一行(如[1, 2, 3, 4, 5]您不会添加尾随逗号。

另一方面,我认为这两种方式都不重要。 切换到const / let是这里的重要问题。

......但现在正在发生转译......

我们不是在转译,是吗? Rollup 只是替换了 ES6 的导入/导出语法,而其他所有东西都单独存在,除非你添加了像rollup-plugin-buble这样let / const

尾随逗号也有更大的用途,而不仅仅是“易于使用”。 在有很多人参与的大型项目中,使用git blame来找出谁负责哪段代码是很有用的。

所以,在这里说明一个明显的问题:如果在多行中列出了由@mrdoob添加的

我个人反对使用尾随逗号,原因与我之前的人所说的完全相同,但我确实看到了好处,而且我现在已经习惯了,因为我们自今年以来也在办公室强制执行此操作。

这些天JS解释器删除了那个逗号?

是的。

关于letvar

如果归结为性能, letvar之间的区别如今已不再重要。 V8 和 Spidermonkey (Firefox) 现在有很好的优化,效果很好。

请参阅这篇文章以获得详细说明(确保运行实际的片段以查看差异现在几乎可以忽略不计): https :

该问题的公认答案还从功能的角度指出了varlet之间的区别,因为它们都有_非常_不同的含义和用例,以防万一不清楚对任何人。

const用于永远不会改变的变量是显而易见的。 如果 javascript 引擎可以看到一个变量是用const ,它就知道它的值永远不会再改变,因此可以对其进行大量优化。

只有我的 2 美分。

以供参考:

尾随逗号是我见过的最好的 js 模式之一,它使差异更加清晰。

这些天JS解释器删除了那个逗号?

除 IE 外,所有浏览器在数组和对象中使用该逗号已超过 10 年

让我补充一点,而不是将它视为奇怪的事情,另一个 POV 是语法实际上是逗号是必需的,它只是浏览器让您休息一下,不需要最后一个。 一个人的陌生,就是另一个人的美。 我发现每一行的一致性都比最后一行不同更令人愉悦。 当然,这些都是个人喜好,我只是提出了另一种看待事物的方式。

至于差异,我在网上找到了这些比较

没有尾随逗号差异添加一行

尾随逗号差异添加一行

让我们先从letconst开始。 一步一步来。

screen shot 2018-07-30 at 5 03 00 pm

我认为这些时间太接近了。 我得到不同的结果

screen shot 2018-07-31 at 9 13 50

尽管在 Chrome 70 中它们并没有远程关闭

screen shot 2018-07-31 at 9 15 36

当我们在做的时候

screen shot 2018-07-31 at 9 19 20

screen shot 2018-07-31 at 9 20 18

让我为尾随逗号再添加一个 POV 😜 你可以看到尾随逗号类似于分号

这是完全合法的代码

 {
      doThis();
      doThat();
      doOther()
 }

最后一行缺少分号。 一种观点是将逗号视为同一件事。 也许这就像人/灯的错觉。

无论你看到2个人还是一根灯杆都是有效的。 但在这种情况下,使用逗号,因为两个 POV 都适合(“逗号结尾看起来像,未定义”与“逗号缺失看起来不一致”)一个有客观的好处,另一个没有......?

我尝试在代码中的某处添加一个const并且它不再编译......

screen shot 2018-07-30 at 5 58 46 pm

@mrdoob输出格式应设置为ES6而不是ESES5

以#6419 结束。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

akshaysrin picture akshaysrin  ·  3评论

danieljack picture danieljack  ·  3评论

yqrashawn picture yqrashawn  ·  3评论

filharvey picture filharvey  ·  3评论

makc picture makc  ·  3评论