Selamlar herkese bu yazıda c# içerisindeki döngülere bakacağız gelin öncelikle döngü nedir ona bakalım;
Döngü: Belirlenen bir alandaki işlemlerin bir koşula bağlı olarak çalıştırılmasına denir.
Evet aslında açıklama bence gayet güzel oldu, şimdi sırasıyla isimlerini verdiğim döngülere bakalım while, do-while, for
Döngülerin başı
Burada günümüzde çok kullanılmayan fakat benim ilk c++ ile tanıştığım bir komuttan bahsetmek istiyorum goto komutu bu komut belirlenen bir satıra geri dönmemizi sağlayarak döngüleri kurmamıza yardımcı olabiliyor fakat bunun için bir label belirtmek gerekiyor aşağıdaki kodu inceleyerek başlayalım.
burada mylbl: şeklinde belirttiğim alanda bir label belirtiyoruz daha sonrasında ise goto komutu ile programımızın çalışma alanını tekrardan mylbl: etki alanından başlayacak şekilde en başa gönderiyoruz.
Ama tabi ki bu program sürekli olarak ekrana Hello World yazdırmak dışında hiçbir şey yapmayacak hatta kapanmayacak bile yani bir nevi sonsuz döngüye girmiş olacak.
Bunun için goto ifadesini bir koşula bağlı tutabiliriz.
1 2 3 4 5 6 7 8 9 |
int myNumber = 0; mylbl: myNumber++; Console.WriteLine("Hello world"); if (myNumber < 10) { goto mylbl; } |
buradaki ifadede mylbl’nin konumuna dikkat edin lütfen sayıyı tanımladığım yerin altında durmakta.
Eğer mylbl değeri ile myNumber ifadesini 0 olarak tanımladığım yer değiştirirse gene sonsuz döngüye girecektir çünkü; her defasında myNumber=0 ifadesi çalıştırılıp myNumber içerisindeki değer 0’a eşitlenecek, böylelikle hiçbir zaman myNumber 10dan büyük veya eşit olamayacağı için sürekli olarak koşul doğru olacak ve goto ifadesi çalıştırılacaktır. Bu yüzden değişkenleri oluşturma yerlerimiz önemlidir.
While Döngüsü
While döngüsünün syntax’ı bence içlerindeki en kolayı ;
En basit haliyle yukarıda bir while döngüsü bulunmakta syntax ı ise while(koşul)
buradaki while ifadesinin yazımını goto örneğimizdeki if ifadesine benzetebilirsiniz
ve buradaki ilk süslü parantez açıldığı yer label oluşturduğumuz alan oluyor en alttaki süslü parantez ise goto komutu gibi düşünebiliriz.
Tek farkı while döngüsünde koşulu en başta belirtiyoruz eğer bu koşul doğru ise döngüye giriyor ve her döngünün sonunda ise bu koşulu kontrol edip tekrardan çalıştırılıp çalıştırılmayacağına karar veriyor.
yukarıdaki kodun açıklaması ise parantez içerisindeki koşul doğru olduğu sürece süslü parantezler arasındaki kodları çalıştır demek. Ve evet, görebileceğiniz üzere koşulumuz her zaman doğru olduğu için projenizde böyle bir kod çalıştırılması problemli olacaktır çünkü bu döngü sürekli olarak çalıştırılacak ve ekrana Merhaba Dünya yazacak.
Peki doğru döngü nasıl olmalı ?
Döngü kesinlikle bir şarta tabi tutulmalı bunda hem fikiriz şöyle bir örnek düşünelim ekrana 10 kez merhaba dünya yazdıran bir uygulama yapalım
Yukarıda gördüğünüz program ekrana 10 kere Merhaba dünya yazdırır, neden?
Çünkü bizim koşulumuz sayı değişkeninin 10dan büyük olmasına bağlı ve eğer sayı değişkeni 0’dan büyük değil ise koşul sağlanamayacağı için döngüden çıkıp altından devam edecektir anlaşılması adına aşağıya video bırakıyorum.
Do While
Sizin talepleriniz üzerine en az 1 kez çalışacabilecek bir döngü yapmak isteyebilirsiniz burada yardımınıza do-while döngüsü çıkmakta syntax’ı ise şu şekildedir
1 2 3 4 5 |
int myNumber = 10; do { Console.WriteLine("Merhaba dünya"); } while (myNumber < 10); |
Yukarıdaki örnek do-While’ın syntaxını açıklıyor aslında do ifadesi en başta oluyor bu sefer while koşulu ise en sonda yazılmalı,
Do ifadesinden sonra süslü parantezleri (scope) tanımlıyoruz bu scope’un sonunda ise while ile birlikte koşulumuzu yazıyoruz.
Yukarıdaki örnekte myNumber ifadesi 10dan küçük iken bu döngü çalışsın diyoruz eğer bunu while içerisinde yazmış olsaydık çalışmayacaktı çünkü myNumber ifadesi zaten 10’a eşit yani 10’dan küçük değil.
Fakat do-while içerisinde do içerisindeki kodlar en az 1 kere çalıştırılır.
Ve evet farkedebildiğiniz üzere eğer buradaki while koşulu doğru olsaydı bu bir sonsuz döngü olacaktı çünkü döngünün içerisinde myNumber değişkeni hiç arttırılmamış bundan dolayı döngü hep aynı sayı kalacaktı ve her zaman doğru olacaktı bu yüzden, bu bir sonsuz döngü olacaktı.
For
Aynen aslında yukarıdaki döngüler bu döngüyü net bir şekilde anlatabilmek için 😀
Şaka bir yana döngülerde neler gerekli fark edebildiniz mi ? İlk olarak, sorgulayabilmemiz için bir veya birden fazla obje gerekli örneğin yukarıdaki örneklerde bu myNumber değeri idi.
Daha sonrasında ise bir koşul gerekli örneğin myNumber değerinin 10dan küçük olması yukarıdaki örneklerdeydi.
Ve son olarak döngünün sonunda bu myNumber değerini arttırmamız veya azaltmamız gerekiyordu ki sonsuz döngüye girmeyelim, şimdi bu anlattıklarımı göz önünde bulundurun şimdi geldik for döngüsünün syntax’ına
for(değişken tanımlama; koşul; işlemler)
yukarıda for döngüsünün içerisinde ne yaptığımızı kısaca açıkladım şimdi bunu daha net anlamak için kod üzerinden bakalım
1 2 3 4 5 |
for (int myNumber = 10; myNumber < 10; myNumber++) { Console.WriteLine("Hello World!"); } |
yukarıda Türkçesini yazdığım kodu bıraktım, for döngüsü üç alandan oluşuyor bu alanları zaten yukarıda tanımladık gelin örneğimizi inceleyelim.
int myNumber=10 bu ilk alanda yaptığımız değişken tanımlama burası for döngüsüne geldiğinde bir kez çalıştırılır bunu unutmayın daha sonrasında ise noktalı virgül ile bu alanı bitiriyoruz;;;;
myNumber<10 ikinci alanda ise koşulumuzu yazıyoruz bu alan döngünün ilk süslü parantezine girmeden hemen önce çalıştırılır bunu da aklımıza not edelim, eğer bu koşul doğru değilse o scope’a giremezsin! bu alanı da noktalı virgül ile ayırıyoruz ;;
myNumber++ burada ise bir arttırma işlemi yapılmış burası döngünün sonunda bir kere çalıştırılır.
Yani anlayacağınız üzere önce değişken tanımlanıyor, koşul kontrol ediliyor, döngüye giriyor, sonunda arttırma işlemi yapıyor, tekrar koşul kontrol ediliyor, tekrar döngüye giriliyor sonunda arttırma işlemi yapılıyor,tekrar koşul kontrol ediliyor. Evet bu kadar uzatmam sıkıcı ama burada sadece ilk baştaki myNumber ifadesinin yalnızca ve yalnızca bir kez çalıştığını unutmayın diye hatırlatmak istedim.
Yukarıdaki döngüde bir problem var bu döngüye hiç girmiyor, niye?