簡體   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