Saya telah menemukan anotasi loop berikut dalam proyek besar yang sedang saya kerjakan (pseudocode):
var someOtherArray = [];
for (var i = 0, n = array.length; i < n; i++) {
someOtherArray[i] = modifyObjetFromArray(array[i]);
}
Yang menarik perhatian saya adalah variabel "n" ekstra ini. Saya belum pernah melihat for a lop ditulis dengan cara ini sebelumnya.
Jelas dalam skenario ini tidak ada alasan mengapa kode ini tidak dapat ditulis dengan cara berikut (yang saya sudah sangat terbiasa):
var someOtherArray = [];
for (var i = 0; i < array.length; i++) {
someOtherArray[i] = modifyObjetFromArray(array[i]);
}
Tapi itu membuat saya berpikir.
Apakah ada skenario ketika menulis loop for seperti itu masuk akal? Ide terlintas dalam pikiran bahwa panjang "array" dapat berubah selama eksekusi loop, tetapi kami tidak ingin mengulang lebih jauh dari ukuran aslinya, tetapi saya tidak dapat membayangkan skenario seperti itu.
Mengecilkan array di dalam loop juga tidak masuk akal, karena kita cenderung mendapatkan OutOfBoundsException.
Apakah ada pola desain yang diketahui di mana anotasi ini bermanfaat?
Sunting Seperti dicatat oleh @ Jerry101 alasannya adalah kinerja. Berikut ini tautan ke tes kinerja yang telah saya buat: http://jsperf.com/ninforloop . Menurut pendapat saya perbedaannya tidak cukup besar kecuali Anda iterasi meskipun array yang sangat besar. Kode yang saya salin dari hanya memiliki hingga 20 elemen, jadi saya pikir keterbacaan dalam kasus ini melebihi pertimbangan kinerja.
n
mungkin lebih lambat daripada menggunakan varian array.Length
karena JITter mungkin tidak melihat bahwa itu bisa menghilangkan cek batas array.