İçeriğe geç

Döngüler: for, while, foreach ile Kodlama Macerası

Kod dünyasında bazen öyle bir noktaya gelirsin ki, aynı işi tekrar tekrar yapman gerekir. İşte tam bu noktada bizim kurtarıcımız, döngüler devreye girer. Hani bazen bir oyunu tekrar tekrar oynamak istersin ya, ya da bir şarkıyı dinlemek, işte kodlamada da durum pek farklı değil. Bu döngüler sayesinde tekrarlayan işleri bir kere yazar, sonra da bilgisayara bırakırsın gerisini.

Şimdi bu döngülerden en bilinenleri, for, while ve foreach. Hepsi aynı kapıya çıksa da, kendi içlerinde minik farkları var. Ben de bu farkları, böyle sanki sohbet ediyormuşuz gibi anlatmaya çalışacağım. Unutmayın, her zaman ilk denemede mükemmel olmaz, hatta kendi programım sınıfta kaldı 🙂

Öncelikle for döngüsünden başlayalım. Bu döngü, genellikle kaç kere tekrar yapacağını önceden bildiğin durumlarda kullanılır. Mesela, 1’den 100’e kadar sayıları ekrana yazdırmak gibi. Ya da bir listedeki her elemanı tek tek gezmek istediğinde. Hani bir işi 5 kere yapman gerekiyorsa, for tam senlik.

Basit bir örnekle pekiştirelim. Diyelim ki bir sepetteki meyveleri tek tek göstermek istiyoruz. Kodumuz şöyle olmalı bence:

string[] meyveler = {"Elma", "Armut", "Çilek", "Karpuz"};

for (int i = 0; i < meyveler.Length; i++)

{

Console.WriteLine(meyveler[i]);

}

Burada ne yaptık? Önce bir meyveler dizisi tanımladık. Sonra for döngüsünü başlattık. int i = 0; ile sayacımızı sıfırdan başlattık. i < meyveler.Length; ile de, dizinin eleman sayısı kadar döndükten sonra durmasını söyledik. En son da i++ ile her döngüde sayacımızı bir artırdık. Sonuçta, ekranda tek tek meyvelerimiz yazdı. Ne güzel değil mi?

Şimdi gelelim while döngüsüne. Bu döngü ise, bir koşul doğru olduğu sürece devam eder. Yani, kaç kere döneceğini tam olarak bilmiyorsun ama ne zaman duracağını biliyorsun. Mesela, kullanıcıdan bir sayı isteyip, o sayı 100’den küçük olduğu sürece toplamını hesaplamak gibi bir şey. Ya da bir dosya okuyorsun ve dosyanın sonuna gelene kadar devam edeceksin.

while döngüsünün mantığı da aslında çok basit. Sadece bir koşula bakıyor. Koşul doğruysa içeri giriyor, yanlışsa dışarı çıkıyor. Kendi programım sınıfta kaldı 🙂 ama while‘ın mantığı bu işte. Bir örnek verelim:

int sayac = 0;

while (sayac < 5)

{

Console.WriteLine("Bu mesaj " + (sayac + 1) + ". kez yazılıyor.");

sayac++; // Bu satırı unutursak sonsuz döngüye gireriz, aman dikkat!

}

Burada da benzer bir mantık var. Sayacımız 5’ten küçük olduğu sürece döngü devam edecek. Her döngüde ekrana bir mesaj yazdırıp sayacı bir artırıyoruz. Eğer o sayac++ satırını unutursak, bilgisayarımız sonsuza kadar bu mesajı yazdırmaya devam eder. Sanırım bu durumla karşılaşan birçok geliştirici olmuştur 😀

Gelelim en sevdiğim döngüye: foreach. Bu döngü, adından da anlaşılacağı gibi, bir koleksiyondaki (dizi, liste vb.) her bir eleman için bir işlem yapmamızı sağlar. Bu döngünün en güzel yanı, ne kadar eleman olduğunu bilmene gerek kalmaması. Kendi kendine koleksiyonun içindeki her şeyi gezer.

foreach ile az önceki meyve örneğini tekrar yapalım:

string[] meyveler = {"Elma", "Armut", "Çilek", "Karpuz"};

foreach (string meyve in meyveler)

{

Console.WriteLine(meyve);

}

Gördünüz mü? Ne kadar sade ve anlaşılır. foreach, koleksiyondaki her bir string için (burada meyve adını verdik), döngüyü çalıştırıyor. Yani, ilk başta ‘Elma’, sonra ‘Armut’, sonra ‘Çilek’ ve en son ‘Karpuz’ ekrana yazılacak. Bence bu, kod okuyabilirliğini çok artıran bir özellik. Gerçi bazen işler ters gider de, bu döngüler yüzünden saatlerce hata ayıklamak zorunda kalabilirsin 🙂

Şimdi gelelim işin biraz daha derinlerine. Hani bazen bir veri setini işlerken, ilk başta for kullanırsın ama sonra eleman sayısını tam bilemediğin veya dinamik bir liste olduğu için while‘a geçmek istersin. Ya da bir listedeki tüm elemanları işlemek ama sadece belirli bir koşula uyanları almak istersin. İşte o zaman bu döngüleri bir arada kullanmak gerekebilir. Hani bazen bir işi yapmak için tek bir yöntem yetmez ya, birden fazla araç kullanırsın, kodlamada da durum böyle.

Bu arada, döngülerde sık karşılaşılan bir hata var, onu da belirteyim. while döngüsünde o sayacı artırmayı unutmak mesela. Ya da for döngüsünde koşulu yanlış yazmak. Bu tür hatalar yüzünden programlar sonsuz döngüye girebilir veya hiç çalışmayabilir. Benim programım da bir keresinde böyle bir hata yüzünden resmen donup kalmıştı, inanılmaz sinir bozucu bir durumdu. Neyse efendim, bu tecrübelerden ders çıkarmak lazım.

Neticede, bu döngüler kodlamanın temel taşlarından. Hangi durumda hangisini kullanacağını bilmek, kodunu daha verimli ve okunabilir hale getirir. for‘u bildiğin tekrar sayısı için, while‘ı koşula bağlı tekrarlar için, foreach‘i ise koleksiyonlardaki her eleman için kullanabilirsin. Bu üçü, sana kodlama hayatında çok yardımcı olacak, bana göre.

Bir de şunu ekleyeyim, bu döngüler sadece basit veri işlemek için değil. Mesela bir web sitesinden veri çekerken, sürekli yeni sayfaları gezip bilgileri toplamak için de bu döngüler kullanılır. Hani bazen bir ürünü almak için farklı sitelere bakarsın ya, işte kod da benzer bir mantıkla çalışıyor. Bu arada, bu tür web scraping işlemleri için kullanılan bazı kütüphaneler var, merak edenler şuradan bir göz atabilir: Google’da web scraping. Tabi bu tamamen konudan biraz sapma oldu ama bence faydalı bir bilgi.

Sonuç olarak, döngüler olmadan modern programlama düşünülemez. Bu üç temel döngüyü iyice öğrenmek, kodlama becerilerini bir üst seviyeye taşıyacaktır. Unutmayın, pratik yapmak her zaman en iyisidir. Bol bol deneyin, hata yapmaktan korkmayın. Çünkü her hata, sizi daha iyi bir geliştirici yapar. Belki de bir gün kendi döngülerinizi yazarsınız, kim bilir? 🙂

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.