JavaScript'te Yineleme için En İyi Uygulamalar
Bu makale, JavaScript'te yineleme için en iyi uygulamaları açıklar.
YouTube Video
JavaScript'te Yineleme için En İyi Uygulamalar
JavaScript'te yineleme için genellikle for
döngüleri kullanılır. Burada, for
döngülerini kullanarak etkili ve okunabilir kod yazmak için en iyi uygulamaların ayrıntılı bir açıklamasını sunacağız.
Doğru Döngüleme Yapısını Seçin
JavaScript, her biri farklı amaçlar için uygun olan birden fazla döngü yapısı sağlar.
1// Example of a for loop
2for (let i = 0; i < 5; i++) {
3 console.log(i);
4}
5
6// Example of a for...of loop
7const array = [10, 20, 30];
8for (const value of array) {
9 console.log(value);
10}
11
12// Example of a for...in loop
13const obj = { a: 1, b: 2, c: 3 };
14for (const key in obj) {
15 console.log(`${key}: ${obj[key]}`);
16}
17
18// Example of a while loop
19let count = 0;
20while (count < 5) {
21 console.log(count);
22 count++;
23}
for
ifadesi, yineleme sayısının önceden belirlendiği durumlar için uygundur.for...of
ifadesi, dizileri ve yinelenebilir nesneleri özlü bir şekilde işlemek için uygundur.for...in
ifadesi, bir nesnenin özellikleri üzerinde gezinmek için kullanılır. Ancak diziler için uygun değildir.while
ifadesi vedo...while
ifadesi, koşullara dayalı döngüleri kontrol etmek için kullanılır.
forEach
yöntemi ve for...of
ifadesini kullanma
Bir dizi üzerinde döngü yapılırken, indeksi erişmek için for
ifadesini kullanmak yaygındır ancak forEach
yöntemi veya for...of
ifadesi daha okunabilir olabilir.
1// Using a standard for loop
2const array = ["apple", "banana", "cherry"];
3for (let i = 0; i < array.length; i++) {
4 console.log(array[i]);
5}
6
7// Using forEach
8array.forEach(item => console.log(item));
9
10// Using for...of
11for (const item of array) {
12 console.log(item);
13}
for
ifadesi, yineleme sırasında açık bir şekilde indeks yönetimi sağlar.forEach
yöntemi, her bir öğeyi özlü bir şekilde işlemek için bir geri çağırma işlevi kullanır.for...of
ifadesi, oldukça okunabilir olup dizideki her bir öğeye doğrudan erişim sağlar.
Döngü Koşullarını Optimize Edin
Döngü koşulu tekrar tekrar değerlendirildiği için gereksiz hesaplamalardan kaçınmak performansı artırabilir.
1const names = ["Alice", "Bob", "Charlie"];
2const scores = [85, 92, 78];
3
4// Inefficient example
5for (let i = 0; i < Math.min(names.length, scores.length); i++) {
6 console.log(`${names[i]} scored ${scores[i]}`);
7}
8
9// Efficient example
10for (let i = 0, len = Math.min(names.length, scores.length); i < len; i++) {
11 console.log(`${names[i]} scored ${scores[i]}`);
12}
- Bu örnekte gösterildiği gibi, hesaplama sonucunu önceden bir değişkene saklamak, döngü yürütmesini daha verimli hale getirebilir.
1const scores = [85, 92, 78];
2let sum = 0;
3let sum2 = 0;
4
5// Inefficient example
6for (let i = 0; i < scores.length; i++) {
7 sum += scores[i];
8}
9console.log(`Total score : ${sum}`);
10
11// Efficient example
12for (let i = scores.length - 1; i >= 0; i--) {
13 sum2 += scores[i];
14}
15console.log(`Total score : ${sum2}`);
- Bu örnekte gösterildiği gibi, koşulu tersine çevirmek bazen daha verimli olabilir.
Döngü İşlemini Optimize Etme
Döngü işlemi tekrar tekrar yürütüldüğünden, gereksiz hesaplamalardan kaçınmak performansı artırabilir.
1const array = ["apple", "banana", "cherry"];
2
3// Inefficient example
4for (let i = 0; i < 100; i++) {
5 const element = document.querySelector("#myElement");
6 element.textContent = `Count: ${i}`;
7}
8
9// Efficient example
10const element = document.querySelector("#myElement");
11for (let i = 0; i < 100; i++) {
12 element.textContent = `Count: ${i}`;
13}
- Bu örnekte,
querySelector
metodunu döngü dışına taşıyarak gereksiz yinelenen hesaplamalar ortadan kaldırılır.
Değişken Alanlarına Dikkat Edin
Döngü içindeki değişkenlerin uygun bir alana sahip olmalarını sağlamak için let
veya const
kullanın. var
fonksiyon alanıyla sınırlı olduğundan beklenmedik davranışlara neden olabilir.
1// Using let
2for (let i = 0; i < 3; i++) {
3 console.log(i);
4}
5
6// Potential issue with var
7for (var i = 0; i < 3; i++) {
8 setTimeout(() => console.log(i), 1000); // 3, 3, 3
9}
10
11// Using let to avoid the issue
12for (let i = 0; i < 3; i++) {
13 setTimeout(() => console.log(i), 1000); // 0, 1, 2
14}
var
fonksiyon kapsamına sahiptir, bu nedenle döngüden sonrai
değeri3
olur vesetTimeout
tarafından çalıştırılan tüm fonksiyonlar3
çıktısını verir.let
kullanıldığında,setTimeout
geri çağırma fonksiyonu içerisindekii
, her döngü için yeni bir değeri ifade eder, bu yüzden beklenildiği gibi0, 1, 2
çıktısı alınır.
Erken Çıkışlarla Okunabilirliği Artırın
Döngü işlemeyi basitleştirmek için break
ve continue
ifadelerini doğru şekilde kullanarak okunabilirliği artırın.
1// Example using break
2for (let i = 0; i < 10; i++) {
3 if (i === 5) {
4 break; // Exit the loop
5 }
6 console.log(i);
7}
8
9// Example using continue
10for (let i = 0; i < 10; i++) {
11 if (i % 2 === 0) {
12 continue; // Skip to the next iteration
13 }
14 console.log(i);
15}
break
kullanarak döngü işlemini yarıda sonlandırabilir ve sonraki tüm yinelemeleri atlayabilirsiniz.continue
kullanarak mevcut döngü işlemini atlayabilir ve bir sonraki yinelemeye geçebilirsiniz.
Derin İç İçe Yapılardan Kaçının
Derin iç içe yapılar kodun okunmasını zorlaştırır, bu yüzden erken dönüşler veya işlevselliği fonksiyonlara ayırarak iç içe yapıların yüzeysel olmasını hedefleyin.
1// Deeply nested example
2for (let i = 0; i < 5; i++) {
3 for (let j = 0; j < 5; j++) {
4 if (i + j > 5) {
5 console.log(i, j);
6 }
7 }
8}
9
10// Improved using function decomposition
11function processPairs(i) {
12 for (let j = 0; j < 5; j++) {
13 if (i + j > 5) {
14 console.log(i, j);
15 }
16 }
17}
18
19for (let i = 0; i < 5; i++) {
20 processPairs(i);
21}
- Bu örnekte, iç içe geçmeleri azaltmak için fonksiyonlar kullanılmıştır.
Hata yönetimini dikkate alın
Döngü içinde hata oluşma olasılığı varsa, uygun hata yönetimini uygulayın.
1const data = ["123", "abc", "456", "xyz"];
2
3// Without Error Handling
4for (const item of data) {
5 const result = parseInt(item);
6 console.log(`Parsed value: ${result}`);
7}
8
9// With Error Handling
10for (const item of data) {
11 try {
12 const result = parseInt(item);
13 if (isNaN(result)) {
14 throw new Error(`Invalid number: ${item}`);
15 }
16 console.log(`Parsed value: ${result}`);
17 } catch (error) {
18 console.error(`Error processing item: ${item}. ${error.message}`);
19 }
20}
- Bu örnekte, geçersiz verilerin işlenmesi, sorunların tespit edilmesi ve raporlanması için hata yönetimi yapılmıştır.
Asenkron işlemede dikkat edilmesi gereken noktalar
Döngülerde asenkron işlemleri ele alırken, async/await
kullanımı kısa ve sezgisel kodlar yazmanızı sağlar.
1const urls = ["https://example.com/1", "https://example.com/2"];
2
3// Proper handling of asynchronous operations
4async function fetchUrls() {
5 for (const url of urls) {
6 const response = await fetch(url);
7 const data = await response.json();
8 console.log(data);
9 }
10}
11
12fetchUrls();
- Bu kod,
urls
dizisindeki URL'leri birer birer asenkron olarak getirir ve sonuçları JSON formatında işler.async/await
kullanarak asenkron işlemler basitleştirilir, her bir URL için sıralı bir şekilde veri alınır ve konsola çıktı alınır.
Asenkron işlemede for...of
deyimi ve forEach()
arasındaki farkı anlayın.
1async function asyncTask(num) {
2 return new Promise(resolve => {
3 setTimeout(() => {
4 console.log(`Task ${num} done`);
5 resolve();
6 }, 100);
7 });
8}
9
10async function runWithForOf() {
11 console.log("Start for...of");
12 for (const num of [1, 2, 3]) {
13 await asyncTask(num);
14 }
15 console.log("End for...of");
16}
17
18async function runWithForEach() {
19 console.log("Start forEach");
20 [1, 2, 3].forEach(async num => {
21 await asyncTask(num);
22 });
23 console.log("End forEach");
24}
25
26async function executeExamples() {
27 await runWithForOf();
28 await runWithForEach();
29}
30
31executeExamples();
-
Döngülerde asenkron işlemi ele alırken, bu örnekte gösterildiği gibi
async/await
ile kullanılanfor...of
ileforEach()
kullanma arasındaki davranış farklarına dikkat edin. -
for...of
ile kod sıralı olarak çalışır ve bir sonraki yinelemeye geçmeden önce döngü içindekiawait
’te bekler. Öte yandan,forEach()
işlemi paralel olarak yürütür.
Sonuç
JavaScript'teki for
ifadesi, basit ama güçlü bir araçtır. Burada tanıtılan en iyi uygulamalardan yararlanarak, verimli ve yüksek derecede okunabilir kodlar yazabilirsiniz. Uygun döngü yapılarını seçmeye, kapsam yönetimine, hata yönetimine dikkat edin ve yüksek düzeyde sürdürülebilir kodlar hedefleyin.
Yukarıdaki makaleyi, YouTube kanalımızda Visual Studio Code'u kullanarak takip edebilirsiniz. Lütfen YouTube kanalını da kontrol edin.