Merhaba arkadaşlar bu yazımızda c# da işimizi kolaylaştıracak olan döngüleri ele alacağız.
Döngüleri genel anlamda tanımlayacak olursak bir program içerisinde bir işlemi birden fazla yaptırmamız gerekirse 2 seçeneğimiz vardır;Ya tek tek aynı kodları yazarız yada bir döngü çeşidini seçerek tek komutla bu işlemlerin hepsini yaptırırız tabi doğal olarak 2. seçeneği kullanmak en kolay ve hızlı yoldur .Burada dikkat edilmesi gereken önemli nokta hangi döngü çeşidini seçip bunu doğru bir şekilde uygulamaktır.
Bu makale sonunda döngülere neden ihtiyaç duyduğumuzu nerelerde kullandığımızı ve işimizi nasıl kolaylaştıracaklarını öğreneceğiz .Sözü fazla uzatmadan konuya hızlı bir giriş yapalım çünkü konumuz hayli uzun.
For Döngüsü
Bu döngü çeşidi en sık kullanılan döngü çeşididir.Başlangıç değerinden itibaren belirtilen koşul sağlanana kadar içine yazıldığı kod parçasını ardı ardına çalıştırır.Genel sözdizimi şu şekildedir;
for (başlangıç;koşul;artım) { //yapılacak işler; } |
Başlangıç:Döngü kontrol değişkenidir.Döngü içerisinde sayaç işlevini görür.Tabi başlangıç değeri döngü dışında da tanımlanabilir.
Koşul: Bu kısım true oldukça döngü çalışır Döngü de kod işletilip sona geldiğinde tekrar bu koşulu kontrol edip devam edip etmeyeceğine karar verir.
Artırım:Burada Başlangıç değerinin döngünün her adımda artırma yada azaltma miktarını belirler.
Şimdi bir örnekle konuyu pekiştirelim;
Örnek: 1’den 100’e kadar (1 ve 100 dahil) olan sayıların toplamını bulan programı tasarlayalım
int toplam = 0; for (int i = 1; i <=100; i++) { toplam += i; } Console.WriteLine(toplam); Console.ReadLine(); |
Burada ilk olarak int veri tipinden toplam isimli bir değişken tanımladık ve bu değişkene ‘0’ değerini verdik.Daha sonra for döngüsü içerisinde ‘i’ isimli bir sayaç oluşturduk ve buna 1 değerini atadık.Koşul olarak sayacımızın 100’den küçük veya eşit oluncaya kadar devam etmesini istedik.Artırım bölümünde ise sayacımızın döngümüzün her çalışmasından sonra bir artırmasını belirledik.Döngünün içerisinde döngünün her çalışmasında toplam değişkeninin ‘i’ sayacıyla toplanması komutunu verdik.Döngümüz sona erdiğinde ekrana ‘toplam’ değişkenini yazdırdık.
Programı çalıştırdığımızda 5050 sonucunu alırız.
Döngüyü Sonlandırma
Normalde döngüler koşul sağlandığı sürece devam ederler ve koşul bittiği zaman da sona ererler fakat döngüyü kendimiz sonlandırmak istersek ‘Break ’sözcüğünü kullanırız.Bu ifade ile döngü sonlandırılarak döngünün dışına çıkılır.Bu konunun daha iyi anlaşılması için bir örnek üzerinde inceleyelim
Örnek;
for (int i = 1; i < 150; i++) { if (i==19) { break; } } |
Bu örneğimizde ilk olarak bir sayaç oluşturduk ve buna 1 değeri verdik.Koşul olarak sayacımızın 149 değerini alıncaya kadar birer birer artırdık.Bundan sonra yapılacak işler kısmında döngünün 19 değeri alıp almadığını kontrol ettik.Sayacımız 19 değerini aldığında break ifadesi ile döngümüzü sonlandırdık.
While ve Do While Döngüleri
While döngüsü bir koşul sağlanıyorken dönmeye devam eder koşul false değerini verdiği zaman ise sonlandırılır. Daha çok döngünün kaç kez döneceğini, belirli bir koşula bakarak programın akışına göre bilgisayarın belirlemesi gereken durumlarda kullanılır
Yazım şekli aşağıdaki gibidir;
while (koşul) { //yapılacak işler; } |
Şimdi bir örnekle konuyu pekiştirelim
Örn: 1’den 100 ‘ e kadar olan sayıların toplamını bulan programı tasarlayalım
int toplam=0; int sayac=1; while (sayac<=100) { toplam +=sayac; sayac ++; } |
Yukarıda görüldüğü gibi sayaç her döngü içerisinde 1 artırılıyor.Sayı 101 olduğunda ise döngü sonlandırılıyor.Buradaki koşul sayaç değişkeninin değerinin 100’den küçük veya eşit olmasıdır.Koşul 100’den büyük oluncaya kadar döngümüz çalışmaya devam edecektir.
While döngüsü bu şekilde sırayla yapılacak işlemlerden daha çok problem çözümlerinde bir koşulun durumunu sınamak için kullanılmaktadır.
Do While döngüsü
C#’da ki for ve while döngülerinden farklı olarak koşul döngünün sonunda kontrol edilmektedir bu da DoWhile döngüsünün en azından bir kez çalıştırılacağı anlamına gelmektedir.
Söz dizimi aşağıdaki gibidir;
do { //Yapılacak işler; } while(koşul); |
Do While döngüsü genel olarak döngünün en az bir defa çalıştırılması istendiğinde kullanılır.
Konuyu daha iyi kavramamız için bir örnek üzerinde inceleyelim
Örnek:
int i = 100; do { i+=50; Console.WriteLine(i); } while (i<100); Console.ReadLine(); |
Bu örneğimizde ‘i’ isimli int veri tipinde bir değişken oluşturduk ve bu değişkene 100 değerini atadık.Sonrasında döngümüzün içine giriyoruz.Koşul kontrol işlemi bittikten sonra yapıldığı için koşul sağlanmasa bile döngü bir defa çalışıyor ve ekrana 150 yazdırıyor.Daha sonra koşul kontrol edilip doğrulanmadığı görülünce döngü sonlandırılıyor.
Not: While döngüsü sayaç ile kullanılırken mutlaka sayacın değiştirilmesine dikkat edilmelidir.Aksi halde sayaç değiştirilmezse koşul sürekli true değerini alarak sonsuz döngüye girilir.Sadece sayacın kontrol edilmediği durumlarda değil koşul belirtirken yapılan mantık hataları da sonsuz döngüye sebep olucaktır.Örneğin aşağıda koşulda yapılan mantık hatasından dolayı oluşturduğumuz kod parçası sonsuz döngüye girecektir.Örnekleyecek olursak;
int i = 0; while (i<10 | i>5) { Label1.Text = (“sonsuz döngüye girildi”); i += 1; } |
Esasında bu sorun bütün döngü türlerinde vardır.Örnek olarak for döngüsünde 1=1 dersek döngümüz sonsuz döngüye girmiş olucaktır.
Foreach Döngüsü
Bu döngü çeşidi dizi(Array) ve koleksiyon (collection) tabanlı nesnelerin elemanları üzerinde ilerleyen bir döngüdür. Bir dizinin tüm elemanlarına erişmek için en iyi yoldur diyebiliriz.Dizinin elemanlarına değer atanabilir ancak ekleme yada çıkartma işlemi yapılamaz.Sözdizimi şu şekildedir;
foreach (var item in collection) { //yapılacak işler; } |
Burada dikkat edilmesi gereken nokta arama yapılan dizinin veri tipi ile aranan değişkenin veri tipi aynı olmalıdır.
Konumuz dışında kalmasına rağmen Foreach döngüsüyle iç içe olan ve bu döngü çeşidinin asıl kullanıldığı dizilere değinmeden geçemeyeceğim
Diziler;Aynı tipteki birden fazla değeri bir arada tutabilen bir koleksiyondur.Dizilerin index (sıra numarası) 0’dan başlar.
Basit bir örnek verecek olursak;
string[] Takimlar = new string[3]; Takimlar[0] = “Galatasaray”; Takimlar[1] = “Fenerbahçe”; Takimlar[2] = “Beşiktaş”; Takimlar[3] = “TrabzonSpor”; foreach (string Takim in Takimlar) { Console.WriteLine(Takim); } Console.ReadLine(); |
Burada 4 elemanlı bir string dizisi oluşturup içine değerlerimizi atadık(string’in de bir char dizisi olduğunu söylemeden geçemeyeceğim).Sonrasında ise Foreach döngüsü ile ekrana atadığımız değerleri yazdırdık.
Aklınızdan burada neden Foreach döngüsüne ihtiyaç duyduğumuzu geçiriyor olabilirsiniz bunun cevabını bir örnek yardımıyla bulalım.
byte[] Notlar = new byte[10]; // Notlar isminde 10 adet byte değeri tutabilecek bir dizi oluşturduk.Şimdi notlarımızı diziye aktaralım. Notlar[0] = 50; Notlar[1] = 60; Notlar[2] = 20; Notlar[3] = 40; Notlar[4] = 70; Notlar[5] = 10; Notlar[6] = 60; Notlar[7] = 30; Notlar[8] = 90; Notlar[9] = 80; //notlar dizisindeki 5 numaralı kişinin notunu okuyalım byte xNot; xNot = Notlar[5]; //Bütün değerlere tek tek erişmek birkaç tane değer için zor değil fakat bütün bir okulun notlarını listeletmek istersek bu bir işkenceye dönüşecektir.İşte burada Foreach döngüsü imdadımıza yetişiyor foreach (byte Not in Notlar) { Console.WriteLine(Not); } |
Tanımladığmız bu foreach döngüsü dizi içinde okuma yaparak tüm dizi elemanlarını ekrana listeleticektir. Burada dikkat edilmesi gereken nokta Notlar dizisi içinde Not değişkenimizle okuma işlemini yaptırıyor olmamız bu nedenle yukarıdada bahsettiğim gibi arama yapılan dizi tipi ile aranan değişkenin tipi aynı olmalıdır.