JavaScript programlama dilinde dizilerle çalışırken sıkça karşımıza çıkan işlemlerden biri, bir dizinin tüm elemanlarını sırayla işlemek, yani her eleman için aynı veya benzer bir işlemi gerçekleştirmektir. Bu gibi durumlarda forEach
metodu oldukça işe yarar bir araçtır. Bu makalede forEach
metodunu detaylı bir şekilde ele alacak, çeşitli örneklerle nasıl kullanıldığını göstereceğiz. Konuyu özellikle yeni başlayanlar ve lise seviyesindeki öğrenciler için sade ve anlaşılır bir dille aktaracağız.
forEach
Nedir?
forEach
, JavaScript’te yerleşik olarak bulunan bir dizi (array) metodudur. Amacı, bir dizinin her elemanı için belirli bir işlemi gerçekleştirmektir. Bu işlemi tanımlayan fonksiyon forEach
metoduna parametre olarak verilir. Bu fonksiyon, dizideki her eleman için bir kez çalıştırılır ve her seferinde o eleman, fonksiyona otomatik olarak gönderilir.
Temel Kullanım
Aşağıdaki örnekte, birkaç şehir isminden oluşan bir diziyi ele alalım:
const sehirler = ["Ankara", "İzmir", "Eskişehir", "Bursa"];
Bu şehirleri sırayla ekrana yazdırmak istiyoruz. Bunu forEach
kullanarak şu şekilde yapabiliriz:
sehirler.forEach(function(sehir) {
console.log(sehir);
});
Yukarıdaki kodda şu işlemler gerçekleşiyor:
forEach
metodu, sehirler
dizisinin her bir elemanı için bir işlem yapacak.
- Her bir şehir adı,
sehir
adlı parametreye atanarak fonksiyonun içine gönderilir.
- Fonksiyon içindeki
console.log(sehir)
ifadesi ile her şehir ismi ekrana yazdırılır.
Koşullu İşlem: Belirli Elemanları Seçmek
forEach
sadece tüm elemanları işlemekle kalmaz, belirli koşullara uyan elemanlar üzerinde işlem yapmamıza da imkân tanır. Örneğin, aşağıdaki öğrenci notlarından sadece 70 ve üzeri olanları yazdıralım:
const notlar = [45, 82, 67, 90, 74, 59];
notlar.forEach(function(not) {
if (not >= 70) {
console.log(`Başarılı not: ${not}`);
}
});
Bu örnekte:
- Dizideki her not kontrol edilir.
- Eğer not 70 veya daha yüksekse, o not ekrana yazdırılır.
Daha Karmaşık Yapılar: Nesne Dizileri
Gerçek hayatta diziler genellikle sadece sayılardan veya metinlerden oluşmaz. Çoğu zaman dizinin her elemanı bir nesne (object) olur. Örneğin, her biri bir kitabı temsil eden nesneler içeren bir dizi düşünelim:
const kitaplar = [
{ isim: "Tutunamayanlar", sayfa: 724 },
{ isim: "Kürk Mantolu Madonna", sayfa: 160 },
{ isim: "Serenad", sayfa: 480 }
];
Her kitap için "Kitap Adı - Sayfa Sayısı"
formatında bilgi yazdırmak istiyorsak:
kitaplar.forEach(function(kitap) {
console.log(`${kitap.isim} - ${kitap.sayfa} sayfa`);
});
Açıklayalım:
kitaplar.forEach(...)
satırı, her kitap nesnesi için bir işlem başlatır.
kitap
parametresi o anki kitabı temsil eder.
- Template literal (şablon metin) kullanılarak kitap adı ve sayfa sayısı birleştirilir.
Neden forEach
Kullanılır?
Bugünlerde for...of
döngüsü veya map
, filter
gibi modern metotlar daha sık tercih ediliyor olsa da forEach
hâlâ çok güçlü ve anlaşılır bir araçtır. Özellikle:
- Yeni başlayanlar için okunabilirliği yüksektir.
- Fonksiyonlarla birlikte kullanımı, daha fonksiyonel bir programlama tarzı sunar.
- Geçici ve tekrar edilmeyecek işlemler için idealdir.
Örneğin bir dizideki her elemanı sadece ekrana yazdırmak veya sunucuya göndermek gibi işlemlerde, forEach
oldukça uygundur.
Sık Yapılan Hatalar
forEach
bir değer döndürmez, yani return
kullanılsa bile bu değer dışarıya aktarılmaz. Sadece yan etkiler için (yazdırmak, veri kaydetmek gibi) kullanılır.
break
ya da continue
gibi döngü kontrol komutları çalışmaz. Her eleman sırayla işlenir ve döngü yarıda kesilemez.
Sonuç
forEach
, JavaScript’te dizilerle çalışırken elimizin altında bulunması gereken en temel araçlardan biridir. Basit kullanım yapısıyla hem öğretici hem de pratik bir yapıdır. Gerek basit dizi işlemlerinde gerekse nesne dizilerinde rahatlıkla kullanılabilir. Yeni başlayanlar için fonksiyonlarla çalışma alışkanlığı kazandırması açısından da oldukça değerlidir.
Kod yazarken her zaman amaç okunabilir ve sade bir yapı kurmak olmalıdır. forEach
, bu amaca uygun birçok senaryoda size yardımcı olabilir. Bu metodu iyi kavrayan biri, ilerleyen süreçte map
, filter
, reduce
gibi daha ileri fonksiyonel dizimlere geçişte zorlanmayacaktır.