Forum
continue;
for döngüsünün başına dönüp bir sonraki i değerinden devam edecektir.
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;
}
}
Goto modern programlamada kullanılmaması gereken bir yapıdır. Goto içeren bir çözüm, çözüm değildir.
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;
}
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
> 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.
Katılıyorum, kesinlikle continue kullanılmalı.