[英]How can I make Sublime Text's “Improved Native for-loop” increment like a normal for-loop?
在Sublime Text 3中,在编写JavaScript时,键入“ for”会触发插入两个可能的代码片段之一:
for (... {... (Improved Native For-Loop)
for (var i = Things.length - 1; i >= 0; i--) {
Things[i]
};
和
for (...) {...}
for (var i = 0; i < Things.length; i++) {
Things[i]
};
一段时间以来,已知通过for循环进行反向迭代具有更好的性能 。 但是,这样做意味着每个基于数组的操作都必须向后执行,这会使代码的可读性降低。 在大多数情况下,所有这些麻烦仅是为了最小程度地提高性能。
不幸的是,“ 改进的原生循环 ”是第一个建议,当意外选择它而不是正常的,可读的,不会与数组迭代的典型约定混淆的循环时,可能会导致某些令人烦恼的情况。
要删除“经改进的 ” for循环代码段,请在packages文件夹中创建一个名为“ JavaScript”的文件夹(“首选项”>“浏览软件包”),然后创建一个名为“ for-()-{}-(更快)的文件。sublime-摘录” 。 在此文件中,放置以下内容:
<snippet>
<content><![CDATA[$1]]></content>
</snippet>
保存并重新启动Sublime。 这将禁用内置的低音提示“ 改进的 ”循环代码段建议。 此时,只有for (...) {...}
代码段的普通代码将处于活动状态。
递减不会增加任何性能。 性能提高仅是由于减少了必须计算数组长度的次数:对于for(i=0;i<Things.length;++i)
,每次迭代都会计算Things.length
; 对于for(i=Things.length-1; i>=0; --i)
, Things.length
仅计算一次。 (请参阅此处 。)
可以通过使用以下语法声明一个新的变量来保存Things.length
的值来获得这种适度的性能提升:
for (var i = 0, l = Things.length; i < l; ++i) {}
要替换捆绑的默认“ 改良 ” for循环,我们将上述语法添加到for-()-{}-(faster).sublime-snippet
文件中。 为了确保两个Things
占位符都被选中,我们使用${1:Things}
。 新的代码段文件内容应如下所示:
<snippet>
<content><![CDATA[for (var i=0, il=${1:Things}.length; i<il; ++i) {
${1:Things}[i];
}]]>
</content>
<tabTrigger>for</tabTrigger>
<scope>source.js</scope>
<description>for (... {... Custom Improved For-Loop</description>
</snippet>
确保代码段正确缩进 。 请注意,您必须使用制表符,而不能使用空格进行缩进 。 保存并重新启动Sublime。
如果要为另一种语言创建类似的循环,请将内容复制到新文件,然后将内容和范围调整为该语言。 快乐的编码。
这些是我当前使用的一些代码片段,它们更加高级,因为它们使用多个字段(点击选项卡可在字段之间切换)。 另外,通过键入forfor
可以访问一个嵌套循环代码段。
文件名: for-()-{}-(faster).sublime-snippet
<snippet>
<content><![CDATA[for (var ${1:i}=0, ${1:i}l=${2:Things}.length; ${1:i}<${1:i}l; ++${1:i}) {
${2:Things}[${1:i}];
}]]>
</content>
<tabTrigger>for</tabTrigger>
<scope>source.js</scope>
<description>for (... {... Custom Improved For-Loop</description>
</snippet>
文件名: for-nested-js-(faster).sublime-snippet
<snippet>
<content><![CDATA[for (var ${1:i}=0, ${1:i}l=${2:condition}; ${1:i}<${1:i}l; ++${1:i}) {
for (var ${3:j}=0, ${3:j}l=${4:condition}; ${3:j}<${3:j}l; ++${3:j}) {
${5:statement};
}
}]]>
</content>
<tabTrigger>forfor</tabTrigger>
<scope>source.js</scope>
<description>for(..){for... Faster Nested For-Loop</description>
</snippet>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.