İçeriğe geç

Menü

Berk Akademi
Birebir ders başvurusu Ücretsiz ön görüşme Ana Sayfa

C# for ve while Döngüsü Farkı Nedir? Hangi Durumda Kullanılır?

csharp-for-ve-while-dongusu-farki
Bu yazıda neler var?
  1. for ve while arasındaki temel fark nedir?
  2. Döngü seçimini dört soruyla nasıl değerlendirebilirsin?
  3. 1’den 5’e kadar sayıları for ve while ile yazdırma
  4. Doğru değer girilene kadar while ile girdi alma
  5. break ve continue döngünün akışını nasıl değiştirir?
  6. Sınır değerlerini ve sonsuz döngü riskini nasıl denetlersin?
  7. Sık Sorulan Sorular

C# for ve while döngüsü farkı, tekrarın nasıl planlandığıyla ilgilidir. Tekrar sayısı veya sayaç düzeni baştan belliyse for, bitiş koşulu süreç içinde değerlendirilen bir duruma ya da doğru girdinin gelmesine bağlıysa while daha okunaklı olabilir. Bu zorunlu bir ayrım değildir; iki yapı da bir koşulla denetlenir ve seçim, kodun amacını hangi yapının daha açık gösterdiğine göre yapılır.

for ve while arasında mutlak bir üstünlük yoktur. Aynı problem iki döngüyle de çözülebilir. Önemli olan başlangıç değerinin, devam koşulunun ve ilerlemeyi sağlayan işlemin kod içinde nerede göründüğünü anlamaktır.

for ve while arasındaki temel fark nedir?

for (int i = 0; i < 5; i++) sözdiziminde üç bölüm bulunur: başlangıç, koşul ve güncelleme. Döngüye girerken i hazırlanır, koşul kontrol edilir, koşul doğruysa gövde çalışır ve ardından i++ işlemi yapılır. Sonra koşul yeniden değerlendirilir. Bu düzen, sayaçla ilerleyen tekrarların akışını tek satırda görünür kılar.

while (sayi < 5) başlığında ise yalnızca devam koşulu yer alır. Başlangıç değeri döngüden önce hazırlanır, koşulu etkileyen değişiklik çoğunlukla gövdenin içinde yapılır. Normal akışta önce başlangıç hazırlanır, sonra koşul kontrol edilir, gövde yürütülür ve bir sonraki kontrolü mümkün kılan ilerleme işlemi gerçekleştirilir. İlerleme işlemi yapılmazsa döngü beklenenden uzun sürebilir.

Her iki yapıda da ilk koşul yanlışsa gövde hiç çalışmayabilir. do-while yapısında ise koşul gövdeden sonra kontrol edilir. Bu nedenle yürütme döngüye ulaştığında gövde en az bir kez çalışır. Kullanıcıdan en az bir kez veri alma gibi durumlarda bu fark önem kazanabilir.

Döngü seçimini dört soruyla nasıl değerlendirebilirsin?

Döngü seçimini dört soruyla nasıl değerlendirebilirsin?

Tekrar sayısı veya sayaç düzeni baştan belli mi?

Kaç tekrar yapılacağı veya sayacın hangi sınırlar arasında ilerleyeceği belliyse for yapısı bu bilgileri başlangıç, koşul ve güncelleme bölümlerinde birlikte göstermeyi sağlar. Belirli sayıda işlem için bu görünüm okunabilirliği destekleyebilir. Tekrar sayısı önceden bilinmiyor ve koşul başka bir duruma göre değişiyorsa while daha uygun bir ifade olabilir.

Başlangıç durumu ilk koşulu sağlıyor mu?

Döngü başlamadan önce değişkenin veya durumun ilk koşulu sağlayıp sağlamadığını kontrol et. Başlangıç koşulu yanlışsa hem for hem de while sıfır tekrar yapabilir. Bu nedenle bu soru tek başına iki yapıdan birini seçtirmez; daha çok algoritmanın başlangıçta ne yapması gerektiğini netleştirir. Gövdenin en az bir kez çalışması gerekiyorsa do-while ayrıca değerlendirilebilir.

Koşulu etkileyen değer nerede güncellenecek?

Düzenli bir sayaç artışı veya azalışı varsa güncellemenin for başlığında bulunması akışı takip etmeyi kolaylaştırabilir. Değer, her turda alınan yeni bir girdiye, yapılan bir işleme veya değişen bir duruma bağlıysa güncellemenin gövde içinde yer alması gerekebilir. Bu durumda while, koşul ile gövde arasındaki ilişkiyi daha doğrudan gösterebilir.

Döngüyü hangi olay veya sınır bitirecek?

Bir üst sınır, alt sınır veya belirli tekrar sayısı döngüyü bitirecekse for tercih edilebilir. Doğru girişin alınması, bir işaret değerinin gelmesi ya da dışarıdaki bir durumun değişmesi bekleniyorsa while daha açıklayıcı olabilir. Yine de iki yapı da bu senaryoları uygulayabilir; karar, sonlanma nedeninin kodda en görünür olacağı yapıya göre verilmelidir.

Bu çerçeveyi uyguladığında, beş kez işlem yapmak için sayaç bilgisi baştan belli olduğundan for anlamlı bir seçenek olur. Doğru girdi gelene kadar denemeye devam etmekte ise tekrar sayısı önceden bilinmediği için while koşulu öne çıkar. Koşul ve sonlanma arasındaki ilişkiyi geliştirmek için algoritmik düşünme bilgi testi üzerinden farklı akışları değerlendirebilirsin.

1’den 5’e kadar sayıları for ve while ile yazdırma

Aynı işlemi iki döngü türüyle de yapabilirsin. Aşağıdaki for programı, 1’den başlayıp 5’e kadar olan sayıları ekrana yazdırır.

for ile yazdırma

using System;

class Program
{
    static void Main()
    {
        for (int sayac = 1; sayac <= 5; sayac++)
        {
            Console.WriteLine(sayac);
        }
    }
}

Beklenen çıktı:

1
2
3
4
5

for başlığındaki ilk bölüm olan int sayac = 1, başlangıç değerini belirler. sayac <= 5 koşulu, döngünün hangi durumda çalışacağını kontrol eder. Gövdedeki Console.WriteLine(sayac) satırı mevcut değeri yazdırır. sayac++ ise her turdan sonra sayacı bir artırır.

while ile aynı işlemi yapma

using System;

class Program
{
    static void Main()
    {
        int sayac = 1;

        while (sayac <= 5)
        {
            Console.WriteLine(sayac);
            sayac++;
        }
    }
}

Bu programın beklenen çıktısı da aynıdır:

1
2
3
4
5

while örneğinde sayaç döngüden önce 1 olarak tanımlanır. Döngü koşulu doğru olduğu sürece mevcut değer yazdırılır ve ardından sayac++ ile sayaç artırılır.

Son turda sayaç değeri 5 iken 5 ekrana yazdırılır. Ardından sayac++ çalışır ve sayaç 6 olur. Döngü koşulu yeniden kontrol edildiğinde 6 <= 5 yanlış olduğu için döngü sona erer. for başlığı sayaç düzenini tek satırda bir arada gösterirken while sürümünde başlangıç ve güncelleme adımlarını gövdenin çevresinde açıkça görürsün. İki sürüm de aynı sonucu üretir.

Doğru değer girilene kadar while ile girdi alma

Doğru değer girilene kadar while ile girdi alma

while, tekrar sayısı önceden belli olmayan durumlarda da kullanılabilir. Aşağıdaki program, 3 + 4 işleminin sonucunu metin olarak kontrol eder ve doğru girdi gelene kadar yeniden soru sorar.

using System;

class Program
{
    static void Main()
    {
        Console.Write("3 + 4 kaçtır? ");
        var giris = Console.ReadLine();

        while (giris != null && giris != "7")
        {
            Console.WriteLine("Tekrar dene.");
            Console.Write("3 + 4 kaçtır? ");
            giris = Console.ReadLine();
        }

        if (giris == "7")
        {
            Console.WriteLine("Doğru.");
        }
        else
        {
            Console.WriteLine("Girdi akışı sona erdi.");
        }
    }
}

Örnek etkileşimde programın yazdığı metinler ile kullanıcı girdileri şöyle ayrılır:

Program: 3 + 4 kaçtır?
Kullanıcı girdisi: 5
Program: Tekrar dene.
Program: 3 + 4 kaçtır?
Kullanıcı girdisi: 7
Program: Doğru.

İlk Console.ReadLine() çağrısı kullanıcının ilk girdisini alır. while koşulu, girdinin null olmadığını ve "7" metnine eşit olmadığını denetler. Yanlış bir değer girilirse mesaj gösterilir, aynı istem yeniden yazdırılır ve girdi döngü gövdesinde tekrar okunur.

Bu örnekte sayısal dönüştürme yapılmaz. Kullanıcının girdiği metin doğrudan "7" ile karşılaştırılır. null, okunacak yeni bir satır kalmadığını bildirir. Girdi "7" olduğunda koşul yanlış olur ve program Doğru. mesajını verir. Böylece tekrar sayısı önceden belirlenmemiş olsa da döngünün sonlanma koşulu açıkça tanımlanmış olur.

break ve continue döngünün akışını nasıl değiştirir?

break, içinde bulunduğu en yakın döngüyü hemen sonlandırır. continue ise mevcut yinelemenin kalan kısmını atlar ve döngünün bir sonraki adımına geçer. Ancak continue kendi başına sayacı değiştirmez. Sayacın değişip değişmeyeceği, güncelleme işleminin kodda nereye yerleştirildiğine bağlıdır.

Aşağıdaki for örneğinde 3 değeri için continue çalışır. Bu nedenle 3 yazdırılmaz. 5 değerine gelindiğinde break çalışır ve 5 yazdırılmadan döngü biter.

using System;

class Program
{
    static void Main()
    {
        for (int sayac = 1; sayac <= 5; sayac++)
        {
            if (sayac == 3)
            {
                continue;
            }

            if (sayac == 5)
            {
                break;
            }

            Console.WriteLine(sayac);
        }
    }
}

Beklenen çıktı:

1
2
4

for döngüsünde continue çalıştığında, gövdenin kalan kısmı atlanır ve başlıktaki sayac++ güncellemesi yine de yürütülür. Bu nedenle sayaç 3 değerinden sonra 4 değerine ilerler.

Aynı davranış while ile kurulurken başlangıç değeri, koşul ve güncelleme noktası birlikte tasarlanmalıdır. Bu örnekte sayaç 0'dan başlar, koşul sayac < 5 olarak kurulur ve sayac++ gövdenin başında, continue kontrolünden önce çalışır.

using System;

class Program
{
    static void Main()
    {
        int sayac = 0;

        while (sayac < 5)
        {
            sayac++;

            if (sayac == 3)
            {
                continue;
            }

            if (sayac == 5)
            {
                break;
            }

            Console.WriteLine(sayac);
        }
    }
}

Beklenen çıktı:

1
2
4

while içinde continue, gövdenin kalanını atlayıp doğrudan koşulun yeniden değerlendirilmesine geçer. Güncelleme işlemi continue satırından sonra olsaydı, 3 değerinde bu güncelleme çalışmayacaktı. Bu nedenle güncellemeyi her algoritmada rastgele öne taşımak eşdeğer sonuç vermez. Güncellemenin, döngünün bütün ilgili yürütme yollarında gerçekleşip gerçekleşmediğini kontrol etmek gerekir.

Sınır değerlerini ve sonsuz döngü riskini nasıl denetlersin?

Sınırları denetlemek için başlangıç değerini, koşulu ve güncellemeyi küçük bir akış incelemesiyle takip edebilirsin. Başlangıç 1 olduğunda sayac <= 5 koşulu 1, 2, 3, 4 ve 5 değerlerini üretir. Aynı başlangıçla sayac < 5 koşulu ise 1, 2, 3 ve 4 değerlerinde çalışır. Başlangıç 6 olduğunda, sayac <= 5 koşullu for ve while döngülerinin gövdeleri hiç çalışmaz.

Sayaç güncellemesi unutulursa veya continue güncelleme satırına ulaşmadan döngüyü koşul kontrolüne gönderirse, koşulun dayandığı değer değişmeden kalabilir. Bu durum döngünün beklenenden uzun sürmesine neden olabilir. Özellikle girdi alan döngülerde, yeni girdinin gerçekten okunup okunmadığını ve girdi akışının sona erme ihtimalini de hesaba katmalısın.

  • Başlangıç değerinde koşulun daha ilk kontrolde yanlış olup olmadığını incele.
  • Döngünün yalnızca tek kez çalışacağı bir durum bulunup bulunmadığını kontrol et.
  • Son sınır değerinin dahil edilip edilmeyeceğine karar ver.
  • Güncellemenin bütün ilgili yürütme yollarında gerçekleştiğinden emin ol.
  • Girdi alan döngülerde girdi akışının sona ermesini de değerlendir.

Kodu elle izlerken her yinelemede başlangıç değerini, koşulun sonucunu ve gövde sonrasındaki güncellenmiş değeri sırayla takip etmek, sınır hatalarını fark etmeyi kolaylaştırır. Bu mantığı temel C# bilgisi açısından değerlendirmek için C# bilgi testini çözebilirsin.

Sık Sorulan Sorular

for döngüsünde başlangıç, koşul veya güncelleme kısmı boş bırakılabilir mi?

Evet. for yapısında başlangıç, koşul veya güncelleme bölümlerinden biri boş bırakılabilir; noktalı virgüller yine yazılır. Koşul bölümü boş bırakıldığında koşul doğru kabul edilir. Döngünün sonlanması için break gibi açık bir çıkış yolu veya başka bir kontrol mekanizması gerekir.

for içinde tanımlanan sayaç, döngü bittikten sonra kullanılabilir mi?

for (int sayac = 1; ...) biçiminde döngü başlığında tanımlanan sayac değişkeni yalnızca döngünün kapsamı içinde kullanılabilir. Döngüden sonra da kullanılması gerekiyorsa değişkeni for başlamadan önce tanımlayıp başlangıç değerini döngü içinde vermelisin.

Döngü akışını koşul, güncelleme ve çıkış noktalarıyla birlikte izlediğinde, for ve while yapılarını amaca uygun biçimde kullanabilirsin.

Bu içerik aradığın cevabı verdi mi?
Yanıtın, hangi yazıları geliştirmemiz gerektiğini anlamamıza yardımcı olur.
Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

Bu konudan sonra ne okuyabilirsin?

Tüm yazılar

İlgili Eğitimler

Berk Keskin, yazılım geliştirici ve eğitmen
Yazar

Berk Keskin Kimdir?

Yazılıma 12 yaşında başladı; İzmir Ekonomi Üniversitesi'ni bölüm birincisi ve yüksek şeref öğrencisi olarak tamamladı. Bugün yalnızca eğitim vermekle kalmıyor, sektörde aktif olarak yazılım projeleri geliştiriyor ve gerçek dünya deneyimini birebir derslerine taşıyor. Ezberden uzak, mühendislik zihniyetini merkeze alan sürdürülebilir öğrenme sistemleri tasarlayarak sorgulayan, üreten ve problem çözebilen yeni nesil yazılımcılar yetiştiriyor.

Sektörel Deneyim & Projeler

  • Ticarify Entegrasyon Yazılım logosu CEO Ticarify Entegrasyon YazılımPazaryerleri ve e-ticaret sitelerine otomatik e-fatura kesimi, sipariş ve kargo takibi hizmetleri sunan e-Dönüşüm platformunun API mimarisini ve yazılım ekibini yönetmektedir.
  • Benim Düğünüm logosu CEO Benim DüğünümDijital etkinlik ve anı paylaşım platformu.
  • Siberdizayn logosu Yazılım Ekibi Lideri SiberdizaynYüksek anlık oyuncu trafiğine sahip oyun kontrol panelleri ve sunucu altyapıları geliştiren yazılım ekibine liderlik etmektedir.
  • MEDYOGRAFYA 360° Dijital Çözümler logosu Dijital Strateji Lideri MEDYOGRAFYA 360° Dijital ÇözümlerŞirketlerin dijital çözümlerde uzun vadede nasıl ilerlemesi gerektiği ve dijital dönüşüm süreçlerinin yönetilmesine destek olmaktadır.
  • İzmir Ekonomi Üniversitesi logosu Danışma Kurulu Üyesi İzmir Ekonomi ÜniversitesiMezun olduğu üniversitesinde, Bilgisayar Programcılığı bölümünün akademik müfredatını güncel sektör ihtiyaçlarına göre şekillendirmek adına Danışma Kurulu'nda görev almaktadır.
WhatsApp Hemen Ara