Yeniden merhabalar. Dördüncü dersimizde akış kontrol mekanizmalarına giriş yapmıştık. if – else ve switch – case yapılarını görmüştük. Yine akış kontrol mekanizmaları başlığı altında yer alan for, while ve foreach döngülerini yazıyı çok uzun tutmamak adına ikinci yazımıza bırakmıştık. Kaldığımız yerden devam edelim…
DERS 5 : Akış Kontrol Mekanizmaları 2
Önceki dersimizde belirli bir koşula göre programı farklı şekillerde devam ettirmeye yarayan if – else yapısını öğrendik. Bu derste ise belirli bir işlemi farklı verilerle tekrar tekrar yapmaya yarayan for, while ve foreach döngülerini öğreneceğiz. Aslında üçü de birbirine çok benziyor. Sadece ufak tefek farklılıklar var. Öncelikle üçünün de yazım şeklini görelim:
//FOR Döngüsü
for (int i = 0; i < 5; i++)
{
Console.WriteLine(i);
}
//WHILE Döngüsü
int j = 0;
while (j < 5)
{
Console.WriteLine(j);
j++;
}
//FOREACH Döngüsü
int[] array = new int[] { 0, 1, 2, 3, 4 };
foreach (int item in array)
{
Console.WriteLine(item);
}
Şimdi tek tek döngüleri inceleyelim. For döngüsü ile başlayalım. For döngüsü, for anahtar sözcüğünden sonra gelen parantez içerisine sırasıyla bir döngü değişkeni ve başlangıç değeri, döngünün devam koşulu, değişkenin artım miktarı yazılır. Ben yukarıdaki örnekte, döngü değişkeni olarak int tipinde bir değişken tanımladım ve başlangıç değeri olarak 0 atadım. Koşul olarak, değişkenimin 5’ten küçük olmasını istedim. Artım değeri olarak da birer birer artsın istedim. Peki bu döngü nasıl işliyor?
Program normal akışına devam ederken for anahtar kelimesini gördüğünde hemen parantezin içerisine bakıyor ve ilk önce değişken tanımlamasını yapıyor: int i = 0. Ardından hemen yazdığımız koşulu test ediyor: 0 < 5. Bu koşulun doğru olduğunu anladıktan sonra hemen süslü parantezin içerisindeki kodları alt alta normal bir şekilde işlemeye devam ediyor. Biz bu parantezler içerisinde az önce tanımlamış olduğumuz i değişkenini kullanabiliyoruz. Program, parantezin içerisindeki kodları işledi ve süslü parantezin kapandığı noktaya geldi. Bu noktada başa geri dönüyor ve ilk yapacağı iş artırım işlemi oluyor. Ben birer birer artırsın istemiştim (bu arada illa ki artacak diye bir şey yok, isterseniz i– yazarak azaltabilirsiniz de veya i = i + 2 yazarak ikişer ikişer arttırabilirsiniz). Program değişkenimizi 1 artırıyor ve i = 1 oluyor. Hemen ardından tekrar koşulumuzu test ediyor: 1 < 5. Koşul doğru dedikten sonra yine süslü parantezin içerisindeki kodları işemeye devam ediyor. Bu işlem i = 4 olana kadar devam ediyor. i = 4 olduğunda süslü parantezlerin içerisinin çalışması bittiğinde, değişkenimizin değeri 1 artıyor ve i = 5 oluyor. Bu noktada 5 < 5 koşulu yanlış oluyor ve program for döngüsünden çıkıp sonraki kısımdan devam ediyor.
Gelelim ikinci döngümüz olan while döngüsüne. Çalışma mantığı aynı şekilde, while anahtar kelimesinin yanındaki parantezin içerisindeki ifade doğru olduğu sürece while süslü parantezleri arasındaki kod çalıştırılacak. Buradaki en büyük fark, değişkenin döngü dışında tanımlanması ve döngü içerisinde değerinin değiştirilmesi. while döngüsünden hemen önce (veya daha önce, istediğiniz bir yerde) döngü değişkenimizi tanımlıyoruz. Koşulumuzu yazıyoruz ve döngü içerisinde değişkenimizin değerini arttırıyoruz (değiştiriyoruz). while döngüsünü kullanırken çok dikkatli olmalısınız, döngü içerisinde değişkenin değerini artırmayı unutursanız veya asla döngü koşulunu yanlış olarak değerlendirecek bir değer atamazsanız, programınız while içerisinde sonsuz bir döngüye girer ve program kilitlenir. Örneğin, i = 5 şeklinde değişken tanımlayıp koşulu i > 4 derseniz ve artım şeklini de i++ şeklinde yazarsanız o döngü asla sonlanmaz. Çünkü i değeri her zaman 4’ten büyük olacaktır. (Not: Burada ufak bir not düşmek istiyorum, az önce sonsuza kadar dedik ama aslında o ifade sonsuza kadar sürmeyecektir. Çünkü i değişkenin değeri birer birer artacak ve int tipinin alabileceği maksimum değere ulaştıktan sonra bir kez daha +1 yapıldığında, değer eksiye döneceği için koşul yanlış olacaktır ve döngü sonlanacaktır. Sonsuz döngü oluşturmak için i = 1 tanımlamasından sonra i != 0 koşulunu ekleyin ve artım değeri olarak da i = i + 2 yazın, bu döngü sonsuza kadar çalışır.)
Son döngü çeşidimiz olan foreach ise çalışma mantığı olarak yine aynı; ancak yazımı biraz farklı. for ve while döngülerinde bir değişken tanımlayıp bu değişkenin değerini değiştirerek döngünün çalışmasını sağlıyorduk. foreach döngüsündeki farklılık ise parametre olarak bir dizi, liste vs. tipinde bir değer alması. Dizileri henüz öğrenmedik; ancak foreach yapısını başka nerde kullanabiliriz şu anda aklıma gelmedi. Dizilerle alakalı konuyu anlatırken foreach döngüsünü de daha detaylı inceleyeceğiz; ama ön bilgi olması açısından kısaca anlatayım. Elimizde bir sayı dizisi olsun (0, 1, 2, 3, 4) veya harf dizisi (‘a’, ‘b’, ‘c’). foreach döngüsünü kullanarak bu dizinin elemanlarını sırasıyla döngünün içinde kullanabiliriz. Her döngü sonunda tanımlamış olduğumuz item değişkeni dizinin bir sonraki elemanı olacak şekilde setlenir. Yani sayı dizisinden örnek verirsek, ilk döngüde item = 0, ikinci döngüde item = 1 vs. olur ve dizideki elemanların tamamı bitene kadar döngü devam eder.
Üç döngünün de nasıl çalıştığını gördük. Peki ama burda bir eksiklik var gibi… for döngüsünü ele alalım. Diyelim ki vermiş olduğum aralık içerisinde bazı değerlerin işletilmesini istemiyorum. Örneğin, döngüyü 0 değerinden başlattım ve 15’e kadar çalışsın istiyorum; ancak 9 değerinde hiçbir şey yapmasını istemiyorum. O zaman bize yardımcı olacak anahtar kelime continue. Süslü parantezler içerisine aşağıdaki if deyimini yazarsak döngü değişkeni 9 olduğunda bir sonraki adımdan çalışmaya devam edecektir.
if (i == 9)
{
continue;
}
Bu demektir ki eğer döngü içerisindeyken işlenmesini istemediğimiz bir durum olursa continue anahtar kelimesiyle döngünün bir sonraki adımına geçebiliriz. continue anahtar kelimesiyle kardeş olan bir de break anahtar kelimesi mevcut. Bu ise döngüden anında çıkmanızı sağlar. Yani döngü 1’den 10’a kadar çalışacaksa ve siz 4. adımda break ifadesi koymuşsanız, geri kalan adımlar işlenmeden döngüden çıkılır.
Son olarak döngülerle alakalı şunu söylemek istiyorum: döngüler çoğu zaman dizi, liste gibi tiplerin değerlerini dolaşmak için kullanılır. O yüzden daha detaylı örnekleri bir sonraki konumuz olan diziler konusunda vermeye çalışacağım. Yine uzun bir yazı oldu; ama konuyu bölmek olmazdı. Bir sonraki dersimiz Diziler’de görüşmek ümidiyle…