Forum

asp.net For Dö...
 
Bildirimler
Hepsini Temizle

asp.net For Döngüsü "Yardım"

8 Yazılar
3 Üyeler
0 Reactions
649 Görüntüleme
(@mehmetugur)
Gönderiler: 277
Reputable Member
Konu başlatıcı
 

kod, For döngüsünün içinde bulunan else bloğuna girdiğinde; geri for döngüsüne dönmesini nasıl sağlayabilirim ? (return demesseniz memnun olurum çünkü return de for döngüsünden çıkıyor)

 

 
Gönderildi : 07/02/2016 15:13

(@cozumpark)
Gönderiler: 16307
Illustrious Member Yönetici
 

continue;

for döngüsünün başına dönüp bir sonraki i değerinden devam edecektir.

 
Gönderildi : 07/02/2016 15:16

(@mehmetugur)
Gönderiler: 277
Reputable Member
Konu başlatıcı
 

Merhaba sorunu goto ifadesiyle çözdüm. Teşekkürler

Kodun çalışır son hali:

 

for (int i = 0; i < dtVeriler.Rows.Count; i++)
{
Tekrar:

string MusteriID = KodUret_SadeceSayisal(7);
bool ID_VerilmeDurumu = kural.Kontrol_MusteriID(MusteriID);

if (ID_VerilmeDurumu == false)
{
dtVeriler.Rows[i]["MusteriID"] = MusteriID;
}
else
{
goto Tekrar;
}
}

 

 
Gönderildi : 07/02/2016 20:28

(@cozumpark)
Gönderiler: 16307
Illustrious Member Yönetici
 

Goto modern programlamada kullanılmaması gereken bir yapıdır.  Goto içeren bir çözüm, çözüm değildir.

 
Gönderildi : 07/02/2016 20:42

(@cozumpark)
Gönderiler: 16307
Illustrious Member Yönetici
 

1 - Aşağıdaki sizin çözümünüz, sadece comment ekledim:

for (int i = 0; i < dtVeriler.Rows.Count; i++)
{
    Tekrar:
    // Yeni bir müşteri kodu üret (string olarak).
    string MusteriID = KodUret_SadeceSayisal(7);
    // Bu kod daha önce kullanılmış mı?
    bool ID_VerilmeDurumu = kural.Kontrol_MusteriID(MusteriID);

    if (ID_VerilmeDurumu == false)
    {
        // Kod daha önce kullanılmamış; verilere eklenebilir.
        dtVeriler.Rows[i]["MusteriID"] = MusteriID;
    }
    else
    {
        // Kod daha önce kullanılmış; tekrar üretmek için geri git.
        goto Tekrar;
    }
}

2 - Goto kullanmayan ara çözüm:

for (int i = 0; i < dtVeriler.Rows.Count; i++)
{
    // Kullanılmamış bir müşteri ID bulana kadar dene.
    string MusteriID = KodUret_SadeceSayisal(7);
    bool ID_VerilmeDurumu = kural.Kontrol_MusteriID(MusteriID);
    while (ID_VerilmeDurumu)
    {
        MusteriID = KodUret_SadeceSayisal(7);
        ID_VerilmeDurumu = kural.Kontrol_MusteriID(MusteriID);
    }
    // Kullanılmamış müşteri ID bulduk; verilere ekle.
    dtVeriler.Rows[i]["MusteriID"] = MusteriID;
}

3 - Olması gereken çözüm: birgün gelecek, üretilen müşteri ID numaraları mutlaka tükenecektir.  Aşağıdaki sürüm bu duruma karşı hata denetimi yapıyor.

for (int i = 0; i < dtVeriler.Rows.Count; i++)
{
    // Kullanılmamış bir müşteri ID bulana kadar dene.
    string MusteriID = KodUret_SadeceSayisal(7);
    if (MusteriID == "-1")
        return -1; // Müşteri ID'ler tükendi.
    bool ID_VerilmeDurumu = kural.Kontrol_MusteriID(MusteriID);
    while (ID_VerilmeDurumu)
    {
        MusteriID = KodUret_SadeceSayisal(7);
        if (MusteriID == "-1")
            return -1; // Müşteri ID'ler tükendi.

        ID_VerilmeDurumu = kural.Kontrol_MusteriID(MusteriID);
    }
    // Kullanılmamış müşteri ID bulduk; verilere ekle.
    dtVeriler.Rows[i]["MusteriID"] = MusteriID;
}

 
Gönderildi : 07/02/2016 21:31

(@mehmetugur)
Gönderiler: 277
Reputable Member
Konu başlatıcı
 

Genel olarak bilgi olması açısından soruyorum:  "Goto modern programlamada kullanılmaması gereken bir yapıdır" demişsiniz bunu neye istinaden böyle bir çıkarım yaptınız 

 
Gönderildi : 07/02/2016 22:30

(@cozumpark)
Gönderiler: 16307
Illustrious Member Yönetici
 

> bunu neye istinaden böyle bir çıkarım yaptınız 

Yazılım Mühendisliği eğitimime, diplomalarıma ve tecrübeme dayanarak söyledim.  Söylediğim bir "çıkarım" değil kabul edilmiş bir olgudur.

Goto kullanılarak yazılmış olan programların idamesi çok zordur.  Goto, Fortran programlama diline "else" yapısı eklenmeden önce kullanılan bir yöntemdi.

Bırakın nesne-tabanlı programlamayı, goto structured programlama'dan da önce kullanılan, şimdi terkedilmiş bir yöntemdir.

Bugün ender durumlarda goto kullanmak mecbur olabilir.  Yukardaki durum bunlardan biri değil.

 

 
Gönderildi : 07/02/2016 23:23

(@yavuzcingoz)
Gönderiler: 36
Eminent Member
 

Katılıyorum, kesinlikle continue kullanılmalı.

 
Gönderildi : 03/03/2016 16:18

Paylaş: