繁体   English   中英

如何使Sublime Text的“改进的本机for循环”增量像普通的for循环一样?

[英]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循环进行反向迭代具有更好的性能 但是,这样做意味着每个基于数组的操作都必须向后执行,这会使代码的可读性降低。 在大多数情况下,所有这些麻烦仅是为了最小程度地提高性能。

不幸的是,“ 改进的原生循环 ”是第一个建议,当意外选择它而不是正常的,可读的,不会与数组迭代的典型约定混淆的循环时,可能会导致某些令人烦恼的情况。

问题

  • 因此,如何改变Sublime Text的行为,使其不自动添加这些怪异的for循环? 即,如何删除该代码段建议?
  • 有没有办法在使用更传统的for循环结构时保持轻微的性能提升? 如何将其用作Sublime Text代码段?

清除异端片段

要删除“经改进的 ” 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM