我如何制作Sublime文本's";改进的Native for loop";像循环的法线一样

How can I make Sublime Text's "Improved Native for-loop" increment like a normal for-loop?

本文关键字:quot 循环 一样 loop for 何制作 Sublime Native 文本      更新时间:2023-09-26

前提

在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循环进行反向迭代具有更好的性能。但这样做意味着每一个基于数组的操作都必须向后进行,这会导致代码的可读性降低。在大多数情况下,所有这些麻烦都只是为了实现最低限度的性能改进。

不幸的是,">改进的Native For Loop"是第一个建议,当意外选择时,可能会导致一些令人讨厌的情况,而不是不符合数组迭代典型约定的正常可读循环。

问题

  • 那么,如何改变Sublime Text的行为,使其不自动添加这些奇怪的for循环呢?也就是说,我该如何删除那个片段建议
  • 有没有一种方法可以在使用更传统的for循环结构的同时保持轻微的性能提升?如何将其用作Sublime文本片段

清除异端代码段

要删除">改进的"for循环片段,请在您的软件包文件夹中创建一个名为"JavaScript"的文件夹(首选项>浏览软件包(,然后在JavaScript文件夹中创建名为"for-((-{}-(更快(.sublime snippet"的文件。在此文件中,放置以下内容:

<snippet>
    <content><![CDATA[$1]]></content>
</snippet>

保存并重新启动Sublime。这将禁用内置的bass ackwards">改进"循环片段建议。此时,只有正常的for (...) {...}片段将处于活动状态。

关于反向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) {}

创建替换代码段

为了替换默认的捆绑">Improved"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>