foreach: kelimeleri ikiye ayıralım for ve each. Normalde for döngüsü bir koşuk doğrultusunda işler ve koşul gerçekleştiği zaman biter.
Örnek verelim:
...
for(int i = 0 ; i < 10 ; i++)
birseylerYap();
...
Burada i = 0 dan başlayarak i < 10 koşulu doğru olduğu sürece i++ yani i değerini bir arttır diye bir döngü kuruluyor. i < 10 koşulu artık geçerli olmadığı zaman döngü bitmiş olur.
Mesela:
for(;;)
birseylerYap()
Bu döngü de geçerlidir, ama koşul olmadığı için bu döngü hiç bitmez. Normalde başlangıç ve sonu belli olmasına rağmen bu örnekde sonu başlangıcı olmadığı için sonsuza gider. Yani hiç bitmez.
Peki foreach nerede?
foreach başlangıcı ve sonunu bizim böyle açık açık vermeden gizliden vererek yaptığımız bir yaklaşım oluyor.
Yani:
List<String> stringList = new ArrayList<>();
...
for(String s : stringList)
birseylerYap()
...
başlangıcı elimizdeki arrayliste ait ilk eleman bitişi ise son eleman oluyor ve her birisi için bir kez dönüyor. Şöyle bir örnek verebiliriz. Mesela fantazi olsun diye bir foreach döngüsü kuracaksınız ve 10 kez çalışmasını istiyorsunuz. Bir arraylist açıp içine 10 tane a harfini add metoduyla ekleyip sonra foreach ile dönseniz yine 10 kerelik bir döngü açmış olacaksınız. Hemen gerçekleştirelim
List<String> l = new ArrayList<>();
l.add("a");
l.add("a");
l.add("a");
l.add("a");
l.add("a");
l.add("a");
l.add("a");
l.add("a");
l.add("a");
l.add("a");
for(String string : l)
birseylerYap()
Örnek biraz gereksiz bir işlem yapmakta ama konuyu anlatmak için verdiğim bir örnek. Sonuç itibariyle elinizdeki listede kaç tane eleman varsa o kadar tekrarda ve her dönüşte bir sonraki elemanı size verecek şekilde çalışır.
Bu işlemi yapabilmesi için de bazı gereksinimleri vardır. Yani başı ve sonunu biz açık bir şekilde değil gizli bir şekilde belirlediğimiz için bizim yazdığımız bir sınıfta hemen kullanamayacağız. Örneğin bir linkedlist örneği yazdık ve bu linkedlist içinde foreach ile dönmek istiyoruz. Bizim linkedlisti tanımayacaktır. Java özelinde birim sınıfımız Iterator arayüzünü (interface) gerçekleştirdiği zaman bu for döngüsünü kullanabilir durumda olacağız.
Bazı durumlarda kullanmak kolaylık sağlarken, kullanımda sınırlarının olduğunu unutmamak lazım.
Örneğin 10 elemanlık listede foreach ile dönerken kaçıncı elemanda olduğumuzu bilemeyiz, yani index bilgimiz yok.
Ya da elimize aldığımız değişkenin içindeki değeri değiştiremeyiz(listeye yansımaz)