javascript - How can I make Sublime Text's "Improved Native for-loop" increment like a normal for-loop? -
premise
in sublime text 3, when writing javascript, typing "for" triggers insertion of 1 of 2 possible code snippets:
for (... {... (improved native for-loop)
for (var = things.length - 1; >= 0; i--) { things[i] }; and
for (...) {...}
for (var = 0; < things.length; i++) { things[i] }; because reasons
it has been known while reverse iteration through loops has better performance. doing means every array-based action has done backwards, , causes code become less readable. of hassle minimal performance improvements in cases.
unfortunately, "improved native for-loop" first suggestion , can result in annoying situations when accidentally chosen instead of normal, readable loop not mess typical conventions of array iteration.
questions
- so, how 1 change behavior of sublime text not automatically add these weird loops? i.e., how can remove snippet suggestion?
- is there way keep slight performance gains while using more traditional loop structure? how can use sublime text snippet?
purging heretical snippet
to remove "improved" for-loop snippet, create folder named "javascript" inside packages folder (preferences>browse packages), , create file named "for-()-{}-(faster).sublime-snippet" within javascript folder. inside file, place these contents:
<snippet> <content><![cdata[$1]]></content> </snippet> save , restart sublime. disable built-in bass-ackwards "improved" loop snippet suggestion. @ point, normal for (...) {...} snippet active.
concerning reverse for-loop
decrementing not provide performance increases. performance increase due decreasing number of times array length has calculated: for(i=0;i<things.length;++i), things.length calculated every iteration; for(i=things.length-1; i>=0; --i), things.length calculated once. (see here.)
this mild performance increase can gained declaring new variable hold value of things.length following syntax:
for (var = 0, l = things.length; < l; ++i) {} creating replacement snippet
to replace default, bundled "improved" for-loop, add above syntax for-()-{}-(faster).sublime-snippet file. make sure both things placeholders selected, use ${1:things}. new snippet file contents should this:
<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> be sure snippet properly indented. note must use tabs , not spaces indenting. save , restart sublime.
if want create similar loop language, copy contents new file , adapt content , scope language. happy coding.
edit: more advanced snippets
these snippets use, more advanced because use multiple fields (hit tab switch between fields). also, there nested loop snippet accessed typing forfor.
file name: 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> file name: 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}) { (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>
Comments
Post a Comment