for(başlangıç, koşul, iteratör)
{
ifade;
}
Başlangıç yerine döngüde kullanılacak olan değişkenin
başlangıç değeri yazılır. Genellikle bu değişken i olarak kullanılır ve döngünün
içinde tanımlanır(int i).
koşul bu i değerinin
belirtilen şartı sağlayıp sağlamadığının kontrol edildiği aşamadır. Şart
sağlanırsa döngü içine girilir ve ifade çalışır. iteratör ise ifade çalıştıktan
sonra bu i değişkeninde ne tür bir değişim olmasını belirttiğimiz alandır.
Örneğin buraya i++ yazarsak i’yi her defasında bir arttırmış oluruz.
Örnek: Alttaki kod i'nin değerini 0'dan 4'e kadar ekrana basar.
Örnek: Alttaki kod i'nin değerini 0'dan 4'e kadar ekrana basar.
for(int i = 0; i < 5; i++)
{
Console.WriteLine("i'nin değeri {0}", i);
//aynı kodu aşağıdaki gibi de yazabiliriz.
//Console.WriteLine("i'nin değeri: " + i);
}
- Genelde bütün döngüler 0'dan başlatılır, çünkü C#'ta dizilerin indeks numaraları 0'dan başlamaktadır ve eğer döngü 1'den başlatılırsa bu durumda incelenen bir dizi varsa onun ilk elemanı atlanmış olur.
- Koşul kısmında birden fazla koşul da kullanılabilir. (i<5 && i*3<10;) Kontrol kısmındaki bu ifade true olduğu sürece döngü çalışmaya devam edecektir.
"i, İngilizce; index yada indexer'ın karşılığı olarak kullanılır. İçiçe for yazılacaksa genelde i, j, k, l, m, n şeklinde döngü değişkenleri(iterator) kullanılır.(Zorunluluk değildir.)"
- Alt alta ayrı 2 for döngüsü yazılacaksa, ikisinde de i değişkeni kullanılabilir. Çünkü döngünün içinde tanımlanan i değişkeni, o döngüden çıkıldığı anda yok edilir.
- Eğer döngü değişkeni(iterator) sonradan kullanılmak isteniyorsa döngüye girmeden tanımlanması gerekmektedir.
- For'un içindeki başlangıç, kontrol ve değişim bölümleri boş bırakılarak ilgili kod döngünün içinde yada dışında da yazılabilir.
Örnek: i'yi 3'e kadar bir, 3'ten sonra iki arttırma;(En sağdaki iterasyon ifadesi boş bırakılıp döngü içinde arttırılacaktır.)
for(int i = 0; i < 10;)
{
Console.WriteLine("i'nin değeri: " + i);
i = i < 3 ? i + 1 : i + 2;
}
- Bir for döngüsü içinde birden fazla döngü değişkeni(iterator) kullanmak da mümkündür.
for(int i = 0, j = 5; i < j; i += 3; ++j)
{
Console.WriteLine("i = {0}, j = {1}", i , j);
}
Bu örnekte i'yi 0'dan j'yi 5'ten başlatıyoruz. Başlangıç ifadesi içinde ,(virgül) ile bunların tanımlandığı alanı belirleyebiliyoruz. ;'den sonra kontrol bölümü geliyor, bakıldığında burada kuralın i'nin j'den küçük olması gözükmektedir. Eğer bu koşul sağlanırsa true dönecek ve döngü içine girilecektir.En sonda da ;'den sonra iterasyon ifademiz geliyor. Yine burada da ;(virgül) ile birden fazla değişken ayırabiliriz. i'yi 3'er arttırırkne, j'yi birer arttırıyoruz.
Break Kullanımı
Herhangi bir durumda döngü bitmeden bir döngüden çıkılması gerektiği zaman o döngünün içine yada herhangi bir koşulun içine break; kodunu yazmak yeterlidir. Örnek:
Break Kullanımı
Herhangi bir durumda döngü bitmeden bir döngüden çıkılması gerektiği zaman o döngünün içine yada herhangi bir koşulun içine break; kodunu yazmak yeterlidir. Örnek:
for(int i = 0; i < 100; i = i + 5)
{
if(i * 2 == 20)
{
break;
}
}
Burada i = 10 olduğu zaman if'in içinde koşul sağlanmış olacak ve break; kodu çalışacaktır. Döngüden çıkılarak sıradaki işleme geçilir.
Continue Kullanımı
Aşağıdaki örnekte i * 2'nin 20'den küçük yada 30'dan büyük olduğu durumlarda, continue ifadesi, kodu for'un bir sonraki iterasyonuna atacaktır ve bir alttaki Console.WriteLine() satırı çalışmayacaktır.
Continue Kullanımı
Aşağıdaki örnekte i * 2'nin 20'den küçük yada 30'dan büyük olduğu durumlarda, continue ifadesi, kodu for'un bir sonraki iterasyonuna atacaktır ve bir alttaki Console.WriteLine() satırı çalışmayacaktır.
for(int i = 0; i < 100; i = i + 5)
{
if(i * 2 < 20 || i * 2 > 30)
{
continue;
}
Console.WriteLine("i: {0} iken devam ediyoruz ", i);
}
2-Foreach Döngüsü
Foreach döngüsü, bir dizi veya koleksiyon gibi bir obje grubu içerisindeki tüm elemanlara erişilebilmesini sağlar.
Foreach'in klasik kullanım şekli aşağıdaki gibidir;
foreach(degiskenTip degiskenAdi in koleksiyon)
{
ifade;
}
Değişken tipi koleksiyonun değişken tipinde olmalıdır.
int[] sayilar = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int max = 0;
foreach (int i in sayilar) //sayilar icindeki her i integer'i icin donelim
{
if (i > max)
max = i;
}
Console.WriteLine("En buyuk sayi {0}", max);
//bu kodun ciktisi -> 9Burada dizi int turunde tanimlandigi icin foreach'in icindeki i degiskeni de int olarak tanimlandi. sayilar dizisinin her elemani icin donuyoruz ve eger o anki i degiskeni max'dan buyukse max artik o anki i degiskeninin degerini aliyor. Boylece max hep en buyuk deger olarak kaliyor.
degiskenTipi var olarak tanimlanirsa buradaistenen dizi yada koleksiyonun degiskeni tutulabilir. var(variable) her turden degiskeni tutmaya yarar.Yukaridaki kodun LINQ ile nasil yapilacagi asagida verilmistir;
int[] sayilar = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int linqMax = sayilar.Max();
Console.WriteLine("En buyuk sayi {0}", linqMax);
Altyapi olarak calisan kod yukaridakinin aynisi olmasina ragmen, link tek satirda isi bitirmektedir.LINQ ifadelerini kanabilmek icin en ustteki using ifadelerinin arasina using System.Linq; ifadesini eklemek gerekir.
- Nesnelerden olusan bir koleksyon icinde de foreach ile donulebilir;
List<DateTime> lst = new List<DateTime> { new DateTime(1990, 6, 12), new DateTime(1980, 09, 12), new DateTime(1970, 2, 3) };
foreach (var item in lst)
{
TimeSpan temp = DateTime.Now.Subtract(item);
int gecenYil = (int)temp.TotalDays / 365;
int gecenAy = (int)temp.TotalDays / 30;
int gecenGun = (int)temp.TotalDays;
Console.WriteLine(item + " uzerinden");
Console.WriteLine(gecenYil + " yil yada " + gecenAy + " ay
yada " + gecenGun + " gun gecmis..");
}
Programin ciktisi:Iteratorun adini item olarak tanimladik. Tur olarak her turden degiskeni tutabildigi icin var kullandik. DateTime tipinde de tanimlayabilirdik, cunku listenin tanimi da DateTime tipinde yapilmis ama yine de var DateTime degiskenleri de tutabilecegi icin bu bizim icin sorun olmayacak.
- For donugusunde anlatilan break ve continue ifadeleri foreach dongusu icin de aynen calisir.
- Durmak ve donguden cikilmasi istenen durumlarda break,
- Koleksiyonun bir sonraki ifadesine gecilebilmesi icin de continue ifadeleri kullanilabilir.
"break ve continue ifadeleri aslinda goto ile ayni islevi gorurler."
- foreach ile dinamik olarak tanimlanan form elemanlari ornegin butonlar da kontrol ettirilebilir.
foreach (var item in this.Controls)
{
if (item is Button)
{
Button btn = (Button)item;
btn.BackColor = Color.Gray;
if (sayi > 0)
{
btn.BackColor = Color.Red;
}
}
}
Burada koleksyon yerine this.Controls yazilarak Form uzerindeki tum kontrollere ulasilmistir. Ardindan bunlara var turundeki item degiskenine atanarak bunlarin buton olup olmadigi kontrol edilmistir. Eger butonsa arka rengi gri yaoilmistir ve eger gerekli kosulu sagliyorsa da arka rengi kirmizi yapilmistir.Foreach Dongusunde Dikkat Edilmesi Gereken Durumlar
- Icinde donulen koleksiyon referans tipi degiskenlerden olusuyorsa, iterator de (item, i) referans tipi olacaktir.
- Foreach dongusunde nesne uzerinde yapilan butun degisiklikler orjinal nesnede de gecerli olacaktir. Ancak eger koleksiyonun deger tipi nesnelerden olusuyorsa o zaman dongu icerisinde nesne uzerinde yapilan degisiklikler orjinal nesneye yansitilmayacaktir.
- Foreach ile donerken koleksiyone ekleme yada cikarma yapilmamalidir aksi takdirde kod calisma zamani hatasi verecektir.
3-While Döngüsü
While döngüsü içindeki kontrol ifadesi doğru (true) olduğu sürece çalışır. Kullanım kalıbı aşağıdaki gibidir;
Kontrol ifadesi her zaman bool bir değer döndürmek zorundadır. Döngüye girmeden önce koşul sağlanıyor mu diye kontrol yapılır. Koşul sağlanıyorsa döngüye girilir.
4-Do-While Döngüsü
Do-While'da önce scope'un içindeki ifade çalışır. Ardından döngünün başlatılıp başlatılmayacağının belirlenmesi için ifade kontrol edilir. ifade true ise döngüye girilir. Bu yöntem scope içindeki kodun en az bir kere çalışmasnı isteğimiz koşullarda tercih edilebilir.Örnek:
Önce sayı adlı değişken ekrana yazdırılır. Ardından da sayının 10'a modu alınarak tersten yazdırılmaya başlanır ve 10'a bölünerek'de yazdırılan basamak sayıdan atılmış olur. Örneğin ilk aşamada 10'a modu alınan sayımız 2914 iken sonraki döngü hareketinde 291'in 10'a modu alınır.
Çıktı:

While döngüsü içindeki kontrol ifadesi doğru (true) olduğu sürece çalışır. Kullanım kalıbı aşağıdaki gibidir;
while (kontrol)
{
ifade;
}
Kontrol ifadesi her zaman bool bir değer döndürmek zorundadır. Döngüye girmeden önce koşul sağlanıyor mu diye kontrol yapılır. Koşul sağlanıyorsa döngüye girilir.
- Aşağıdaki programda; döngü her çalıştığında başta tanımlanan ad değişkenin metni sondan 1 karakter daha azaltılarak, ad değişkeninin uzunluğunun 0'dan büyük olma koşulu sağlanana dek ekrana yazdırılır.
string ad = "Gökalp";
while (ad.Length > 0)
{
ad = ad.Substring(0, ad.Length-1);
Console.WriteLine(ad);
}
Çıktısı:4-Do-While Döngüsü
Do-While'da önce scope'un içindeki ifade çalışır. Ardından döngünün başlatılıp başlatılmayacağının belirlenmesi için ifade kontrol edilir. ifade true ise döngüye girilir. Bu yöntem scope içindeki kodun en az bir kere çalışmasnı isteğimiz koşullarda tercih edilebilir.Örnek:
int sayi = 2914;
Console.WriteLine("Sayı: " + sayi);
Console.Write("Tersten sayı: ");
do
{
Console.Write(a);
int a = sayi % 10;
sayi = sayi / 10;
} while (sayi > 0);
Önce sayı adlı değişken ekrana yazdırılır. Ardından da sayının 10'a modu alınarak tersten yazdırılmaya başlanır ve 10'a bölünerek'de yazdırılan basamak sayıdan atılmış olur. Örneğin ilk aşamada 10'a modu alınan sayımız 2914 iken sonraki döngü hareketinde 291'in 10'a modu alınır.
Çıktı:
Hiç yorum yok:
Yorum Gönder