मैंने एक बड़े प्रोजेक्ट में निम्नलिखित लूप एनोटेशन पाया है जिस पर मैं काम कर रहा हूं (छद्मकोड)
var someOtherArray = [];
for (var i = 0, n = array.length; i < n; i++) {
someOtherArray[i] = modifyObjetFromArray(array[i]);
}
क्या मेरा ध्यान लाया यह अतिरिक्त "एन" चर है। मैंने पहले कभी इस तरह से लिखे गए लोप के लिए नहीं देखा है।
जाहिर है इस परिदृश्य में कोई कारण नहीं है कि इस कोड को निम्नलिखित तरीके से नहीं लिखा जा सकता है (जो मैं बहुत ज्यादा इस्तेमाल कर रहा हूं):
var someOtherArray = [];
for (var i = 0; i < array.length; i++) {
someOtherArray[i] = modifyObjetFromArray(array[i]);
}
लेकिन यह मुझे सोच में पड़ गया।
क्या ऐसा कोई परिदृश्य है जब इस तरह के लूप के लिए लिखने से कोई मतलब होगा? यह विचार मन में आता है कि लूप निष्पादन के दौरान "सरणी" की लंबाई बदल सकती है, लेकिन हम मूल आकार से आगे लूप नहीं करना चाहते हैं, लेकिन मैं इस तरह के परिदृश्य की कल्पना नहीं कर सकता।
लूप के अंदर के ऐरे को सिकोड़ने से भी कोई मतलब नहीं है, क्योंकि हमें आउटऑफबाउंड्स अपवाद प्राप्त होने की संभावना है।
क्या एक ज्ञात डिज़ाइन पैटर्न है जहाँ यह एनोटेशन उपयोगी है?
संपादित के रूप में विख्यात @ Jerry101 कारण प्रदर्शन है द्वारा। : यहाँ प्रदर्शन परीक्षण मैं बनाया है के लिए एक लिंक है http://jsperf.com/ninforloop । मेरी राय में अंतर तब तक बहुत बड़ा नहीं है जब तक कि आप एक बहुत बड़ी व्यूह रचना नहीं कर रहे हैं। जिस कोड को मैंने इसे कॉपी किया था, उसमें केवल 20 तत्व तक थे, इसलिए मुझे लगता है कि इस मामले में पठनीयता प्रदर्शन पर विचार करती है।
n
की तुलना में धीमी हो सकती है array.Length
क्योंकि JITTER नोटिस नहीं कर सकता है कि यह सरणी सीमाओं की जाँच को समाप्त कर सकता है।