|
| 1 | +## Dizi İterasyonu ve Özellikleri |
| 2 | + |
| 3 | +Diziler JavaScript nesneleri olmalarına rağmen, iterasyon yapmak için |
| 4 | +[`for in`](#object.forinloop) döngüsü kullanmak için bir neden yoktur. |
| 5 | +Aslında dizilerde `for in` kullanılmasına **karşı** bazı iyi nedenler |
| 6 | +vardır. |
| 7 | + |
| 8 | +> **Not:** JavaScript dizileri *associative* **değildir**. JavaScript ile sadece |
| 9 | +> [nesneler](#object.general) ile anahtar-değer ilişkilendirmesi mümkündür. |
| 10 | +> Ve *associative* diziler eleman sıralamasını **korurlar** ama, nesneler |
| 11 | +> **korumazlar**. |
| 12 | +
|
| 13 | +`for in` döngüsü prototip zincirindeki tüm özellikleri saydığı için ve bunu |
| 14 | +engellemenin tek yolu [`hasOwnProperty`](#object.hasownproperty) kullanmak |
| 15 | +olduğu için `for in` döngüsü sıradan bir `for` döngüsünden **yirmi kata kadar** |
| 16 | +daha yavaştır. |
| 17 | + |
| 18 | +### İterasyon |
| 19 | + |
| 20 | +Dizilerde iterasyon yaparken en iyi performans için en iyi yol klasik `for` |
| 21 | +döngüsünü kullanmaktır. |
| 22 | + |
| 23 | + var list = [1, 2, 3, 4, 5, ...... 100000000]; |
| 24 | + for(var i = 0, l = list.length; i < l; i++) { |
| 25 | + console.log(list[i]); |
| 26 | + } |
| 27 | + |
| 28 | +Yukarıdaki örnekte bir optimizasyon var, o da dizinin uzunluğun iterasyonun |
| 29 | +başında `l = list.length` ile saklanmış olması. |
| 30 | + |
| 31 | +`length` özelliği dizinin kendisinde tariflenmiş olmasına rağmen, her adımda |
| 32 | +bu özelliği okumanın yine de bir maliyeti vardır. Modern JavaScript motorları |
| 33 | +bu tür durumlar için **muhtemelen** optimizasyon yapıyor olsa bile, programın |
| 34 | +her zaman modern bir motorda çalışacağından emin olmak mümkün değildir. |
| 35 | + |
| 36 | +Aslında, yukarıdaki örnekteki optimizasyonu uygulamamak döngünün |
| 37 | +**iki kat daha** yavaş çalışmasına neden olabilir. |
| 38 | + |
| 39 | +### `length` özelliği |
| 40 | + |
| 41 | +`length` özelliğine değer atanarak diziyi **kısaltmak** için kullanılabilir. |
| 42 | + |
| 43 | + var foo = [1, 2, 3, 4, 5, 6]; |
| 44 | + foo.length = 3; |
| 45 | + foo; // [1, 2, 3] |
| 46 | + |
| 47 | + foo.length = 6; |
| 48 | + foo; // [1, 2, 3] |
| 49 | + |
| 50 | +Daha küçük bir uzunluk atanması diziyi kısaltır, fakat daha büyük bir uzunluk |
| 51 | +atanmasının dizi üzerinde bir etkisi yoktur. |
| 52 | + |
| 53 | +### Sonuç |
| 54 | + |
| 55 | +En iyi performans için her zaman sıradan `for` döngüsü kullanılmalı ve |
| 56 | +`length` özelliği saklanmalıdır. Dizilerde `for in` döngüsünün kullanılmış |
| 57 | +olması hatalara meyilli kötü yazılmış bir programa işaret eder. |
| 58 | + |
0 commit comments