İlk C# Uygulamam ( Sayı Kapmaca - Konsol Uygulaması )
-
Ah şu go to multi threading bir program yazarken kullanmıştım sonra flag ile tanıştım tabi. Işte algoritma bilmeyince böyle oluyor. her neyse C# dan nefret ediyorum neden bilmiyorum ama nefret ediyorum işte :D
Başarılar :D Bir dile başlayacak olsaydım . Python , R veya çok iyi derecede goLang öğrenirdim.
EDİT ; goto'ları doWhile çevir hocam hem kod okunabilirliği artar hemde goto dan kurtulursun.
MhmdAlmz tarafından 25/Mar/18 22:00 tarihinde düzenlenmiştir -
Günün birinde birisi demişki, goto kullanmayın, çok kötü görünüyor ve o gündür herkes aynı şeyi söylüyor. Kullanılmayacak bir işlev o halde neden var ? Birisi bir gün bir şey söylemiş ve kimse bilmiyor neden. Yeni başlayanların kafasını karıştırabiliyor uzun işlemlerde diye düşünmüş. Ama yeni başlayanlar da öyle denetimi yitirecek kadar büyük programlar yazmıyor. Bence ezbere konuşmak yanlış olur. While döngüsü kullanırsan daha kısa kodlar ile yazabilirsin. Seneler önceleri Basic'te 1000 satır ile yazdığım kodları 100 - 150 satıra sızdırabilmiştim. Ama goto kullanmanda bir sakınca yok. Tebrikler.
Ben şu şekilde derledim komut satırından C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc oyun.cs
Tek dosya olarak açınca Sharp Develop derleme seçenği göstermiyor
-
Arkadaşlar ilk yazılımım olduğunun altını çizmek istiyorum :D 1 ay 2 ay sonra dönüp tekrar bakarım elbet, şimdilik önerilerinizin yarısındaki komutları bile ilk defa duyuyorum :D
teşekkürler, yapıcı, güzel bi konu oluyor. Hepsini not alıyorum, tek tek araştıracağım :)
-
emrah20 bunu yazdı
Günün birinde birisi demişki, goto kullanmayın, çok kötü görünüyor ve o gündür herkes aynı şeyi söylüyor. Kullanılmayacak bir işlev o halde neden var ? Birisi bir gün bir şey söylemiş ve kimse bilmiyor neden. Yeni başlayanların kafasını karıştırabiliyor uzun işlemlerde diye düşünmüş. Ama yeni başlayanlar da öyle denetimi yitirecek kadar büyük programlar yazmıyor. Bence ezbere konuşmak yanlış olur. While döngüsü kullanırsan daha kısa kodlar ile yazabilirsin. Seneler önceleri Basic'te 1000 satır ile yazdığım kodları 100 - 150 satıra sızdırabilmiştim. Ama goto kullanmanda bir sakınca yok. Tebrikler.
Ben şu şekilde derledim komut satırından C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc oyun.cs
Tek dosya olarak açınca Sharp Develop derleme seçenği göstermiyor
Mesajımı tekrar okumanı tavsiye ediyorum. Bir yerimizden uydurmak gibi bir alışkanlığımız yok.
Eğer program akışını şartsız zıplamalara bağlayabiliyorsan, o program akışı ile ilgili değil, tekrarlama ile ilgilidir. GOTO gerekmez.
Eğer bir şart kontrolü sonrası GOTO ile zıplama yapıyorsan, programın yapısallığını bozarsın. Eskilerin diliyle sub çağırmak daha uygun olur.
Çok çetrefilli döngününün içinden goto ile çıkacaksan ve aldığın kaynakları geri vereceksen GOTO'yu doğru kullanmışsındır. Örneğin:
for(int i = 0; i < 10000; ++i){
for(int j = 0; j < 10000; ++j) {
for(int k = 0; k < 10000; ++k) {
//bir sürü işlem
if(bulundu) goto Son;
//bir sürü işlem daha
Son:
return true;
FSM yazarken kullandıysan, doğru kullanmışsındır.
Kodu gerçekten çok kısalttı fakat anlaşılmasını zorlaştırmadı ise doğru kullanmışsındır.
Bu gibi kullanımlar yoğun matematiksel işlem ya da kontrol yapan programlarda mevcut. Örneğin libav. Her tarafında böyle şeyler görürsün çünkü libav, C ile yazılmış bir kütüphanedir ve C dili bildiğiniz gibi istisna mekanizmasına sahip değildir. Hata durumunda temizlik işlemleri bu şekilde sağlanır. Şu örneğe bakabilirsiniz https://www.ffmpeg.org/doxygen/2.4/transcode__aac_8c_source.html
Eski VB (6 ve öncesi) sürümlerde ve VBS'de de aynı şekilde gotolar hata kontrolü ve ele alınması için kullanılmaktadır.
Hayır, senin elinde C# gibi OOP bir dil var. Bu saatten sonra neden GWBASIC gibi if x = 1 then goto 20 yazıyorsun? Mantığı nedir?
-
Peki sevgili üstadlarım, goto kullanmadan kodlarıma ilgili işlevi nasıl sağlayabilirdim?
Misal ilk goto "gir:"
konsolda bir sayı girmemiz isteniyor. 49 dan küçük veya eşit ise hata verecek.
Bu hatanın sonuna(if) tekrar bir sayı isteyebilirim ( readline )
ama tekrar 49dan aşağı girerseler bu sefer kontrol edemeyecek. haliyle (if) in üstüne attım goto ile, böylece 49<= girildiği sürece hatayı verip yukarı atıcak. 50 veya üstü girilirse de devam edecek. keza aşağıdaki goto'lar da benzer şekilde, girilen sayıyla işlem yaptıktan sonra yeni değerin girilmesini istiyor. işlemin kaç adım süreceği beli olmadığı için for veya while gibi bir şey kullanamadım. belki de ben beceremedim.
nasıl yaparız?
-
noname bunu yazdı
Peki sevgili üstadlarım, goto kullanmadan kodlarıma ilgili işlevi nasıl sağlayabilirdim?
Misal ilk goto "gir:"
konsolda bir sayı girmemiz isteniyor. 49 dan küçük veya eşit ise hata verecek.
Bu hatanın sonuna(if) tekrar bir sayı isteyebilirim ( readline )
ama tekrar 49dan aşağı girerseler bu sefer kontrol edemeyecek. haliyle (if) in üstüne attım goto ile, böylece 49<= girildiği sürece hatayı verip yukarı atıcak. 50 veya üstü girilirse de devam edecek. keza aşağıdaki goto'lar da benzer şekilde, girilen sayıyla işlem yaptıktan sonra yeni değerin girilmesini istiyor. işlemin kaç adım süreceği beli olmadığı için for veya while gibi bir şey kullanamadım. belki de ben beceremedim.
nasıl yaparız?
private static int SayıAl3(int AltSınır, int ÜstSınır, char ÇıkışKarakteri) { while (true) { var giris = Console.ReadLine(); if (giris.IndexOf(ÇıkışKarakteri) >= 0) { return int.MaxValue; } var basarili = Int32.TryParse(giris, out int sayi); if ((sayi >= AltSınır && sayi <= ÜstSınır && basarili)) { return sayi; } Console.WriteLine("{0}-{1} arasında bir sayı girmelisiniz. Çıkış için \"{2}\".", AltSınır, ÜstSınır, ÇıkışKarakteri); } }
Mesela üstteki bir yoldur (her ne kadar kullanıcı deneyimini arttırmış olsa da programcılık açısından yanlış denebilir).
-
Object oriented programlama yaparken cohesion ve coupling konularına da dikkat etmen lazım. Kod büyüdükçe işler goto kullanmanın ötesine geçecek. Kodunun şu an için acemice yazıldığının ve bir süre de böyle olacağını düşünerek yazdığın her syntaxın daha iyi bir yöntemi olup olmadığını araştır.
-
noname bunu yazdı
Peki sevgili üstadlarım, goto kullanmadan kodlarıma ilgili işlevi nasıl sağlayabilirdim?
Misal ilk goto "gir:"
konsolda bir sayı girmemiz isteniyor. 49 dan küçük veya eşit ise hata verecek.
Bu hatanın sonuna(if) tekrar bir sayı isteyebilirim ( readline )
ama tekrar 49dan aşağı girerseler bu sefer kontrol edemeyecek. haliyle (if) in üstüne attım goto ile, böylece 49<= girildiği sürece hatayı verip yukarı atıcak. 50 veya üstü girilirse de devam edecek. keza aşağıdaki goto'lar da benzer şekilde, girilen sayıyla işlem yaptıktan sonra yeni değerin girilmesini istiyor. işlemin kaç adım süreceği beli olmadığı için for veya while gibi bir şey kullanamadım. belki de ben beceremedim.
nasıl yaparız?
while(true){
console.writeLine("Lütfen 50'den büyük bir sayı girin");
string giris = console.readline();
if(giris==q){
break;
}
int32 a = convert.toint32(giris);
if(a>=50){
// yapılması gereken işlemler
}
else{
console.writeline("50'den küçük bir değer girdiniz, lütfen tekrar bir değer giriniz");
}
hatta int32 ye convert etme yönteminde oluşabilecek sıkıntılar için try catch bloğu da kullanılabilir. try catch bloğunun özelliği şudur, try bloğunda yazdığın bölüm derlenir eğer içerisinde hata vermesini sağlayacak bir durum oluşursa catch bloğu çalışır. kendine has hata yakalama sınıfları var ama senin açından en basit yöntem ile şu şekilde olabilir
try{
int32 a = convert.toint32(giris);
if(a>=50){
// yapılması gereken işlemler
}
else{
console.writeline("50'den küçük bir değer girdiniz, lütfen tekrar bir değer giriniz");
}
}
catch{
console.writeline("lütfen sadece sayı giriniz!")
}