C# GoTo Nasıl Kullanılır? dersimiz ile C# eğitimimize devam ediyoruz. C sharp goto komutu bir nevi döngü oluşturmamızı sağlar. Metodlar içerisinde bir etiket belirleriz. İşler istediğimiz gibi gitmezse kodları belirlediğimiz etiketten yeniden çalıştırırız. Yada bir for döngüsü gibi istediğimiz şart sağlanana kadar kendimize özgü bir döngü kurabiliriz. Daha iyi anlayabilmeniz için nasıl kullanacağımızı göstereyim.
C# hakkındaki diğer derslerim için tıklayabilirsiniz.
C Sharp GoTo Nasıl Kullanılır?
Goto kullanabilmemiz için metod içerisinde bir etiket tanımlamamız gerekiyor. Etiket tanımlama işlemini ise ( : ) iki nokta ile yapıyoruz.
C Sharp goto ile küçük bir sayı bulma oyunu yapalım. :) Textbox’a girilen sayı sıfır ise doğru kabul edelim ve mesaj gösterip formu kapatalım.
int GirilenSayi = 0; private void button1_Click(object sender, EventArgs e) { int Sayac = 0, Deneme = 0; GirilenSayi = Convert.ToInt16(textBox1.Text); Deneme++; Etiket: Sayac++; if (Sayac == Deneme) { if (GirilenSayi == 0) { MessageBox.Show("Bildiniz"); Close(); } else { textBox1.Text = ""; MessageBox.Show("Yanlış"); goto Etiket; } } }
İşin aslı ilk yazdığım şekilde sonsuz döngüye girdiğinden kodları biraz değiştirdim ve bu hale geldi. :D Bu şekilde bir işlem muhtemelen olmayacağından saçma da olsa örnek olması amacı çalışır hale getirdim. Yazdığım kodları biraz açıklayayım.
Dediğim gibi kodların sonsuz döngüye girmesi yüzünden bu döngüyü kırmaz amacıyla Sayaç ve Deneme değişkenlerini de tanımladım.
Sayı yazılıp butona tıklandığında iki int değişken tanımlıyoruz. GirilenSayi değişkenine de textbox’a yazılan değeri alıyoruz. Deneme değişkenini butona tıklanma sayısı olarak düşünebilirsiniz. Gerçi bu örnekte bir hükmü yok sadece döngüyü kırmak için. Etiketimizi de tanımladıktan sonra sayaç değişkenimizi bir arttırıyoruz. Eğer sayaç değişkeni Deneme değişkenine eşit ise girilen sayının istediğimiz sayı olup olmadığını kontrol ediyoruz. Doğru değilse else bloğuna iniyor ve yanlış diye mesaj çıkartıp goto ile “Etiket” adlı etiketimize giderek altındaki kodlar tekrar işletiliyor. Burada sayaç ve deneme değişkenleri aynı olmadığı için döngü kırılıyor. Buraya bu kontrolü koymasaydık sonsuz döngüye girecekti.
Saçma olduğu için bu örneği hiç yazmayacaktım ama hem istedikten sonra bir şekilde istediğimizi elde edebileceğimizi hemde “her zaman daha kısa yolu vardır” anlayışını göstermek için çalıştırıp yazmak istedim. Aşağıdaki örneğimiz de, ilk örneğimizde yapmak için uğraştığımız şeyin aynısını yapmaktadır. :D
Ayrıca Yazılıma Başlamak Mı İstiyorsunuz? Görmeniz Lazım! başlıklı yazıma da gönderme yapmak istedim. Bu yazımda yaşadığım bu durumdan linkeki yazımda uzun uzun bahsetmiştim. :D
C Sharp goto komutumuzu switch case içerisinde de kullanabiliriz.
switch (GirilenSayi) { case 0: MessageBox.Show("Cevabı Bildiniz"); Close(); break; case 1: goto case 5; case 2: goto case 5; case 3: goto case 5; case 4: goto case 5; case 5: MessageBox.Show("Yanlış"); break;
Şimdi daha mantıklı bir örnek yapalım. :D
Senaryomuz şöyle olsun. Uzun bir listemiz var diyelim. Bu listemizde aradığımız veri var mı? yok mu? onu kontrol edelim. Varsa A işlemini yapıp “Arama tamamlandı” mesajı verelim. Yoksa da “Aradığınız değer bulunmadı” mesajı gösterip ardına da “Arama Tamamlandı.” mesajı gösterelim. Kodlarım tüm açıklamalarını kod satırları arasında yazdım. ( Bulabildiğim en mantıklı örnek :D )
List<int> IntList = new List<int>(); // Listemizi tanımladık private void Form1_Load(object sender, EventArgs e) { Random rnd = new Random(); // Random Sayı üretiyoruz for (int i = 0; i < 500; i++) { //0 ile 1000 arasında Random sayı üretip 500 tanesini de listeye alıyoruz IntList.Add(rnd.Next(0, 1000)); // NOT: Aynı sayılar birden fazla olabilir. Örn 10 tane 123 olabilir. } } private void button1_Click(object sender, EventArgs e) { // Listemizi taramaya başlıyoruz. for (int i = 0; i < IntList.Count; i++) { // IndexOf Metodu ile aradığımız değerin index'ini alıyoruz. // Aradğımız değer eğer listede varsa index'i sıfırdan büyük olacaktır. if (IntList.IndexOf(Convert.ToInt32(textBox1.Text)) > 0) { // Aradığımız değer listede varsa Islem_A etiketine gidecek goto Islem_A; } } // Aradığımız değer listede yoksa buradan devam edecek. MessageBox.Show("Aradığınız Değer Bulunamadı."); // Aradığımız değer listede yoksa Tamamla etiketine gidecek goto Tamamla; // NOT: Tamamla etiketini koymasaydık yine de A_Adli_Islem(); metodumuz işletilecekti. // A_Adli_Islem(); metod işletilmesin diye metodun altındaki bir satıra gönderdik. Islem_A: // Aradığımız değer listede varsa buradan devam edecek. A_Adli_Islem(); // Aradığımız değer listede yoksa buradan devam edecek. Tamamla: MessageBox.Show("Arama Tamamlandı"); } void A_Adli_Islem() { MessageBox.Show("A işlemi çalıştı"); // işlemler }
C# List<T> hakkındaki yazım için tıklayınız.
C# Random Metodu hakkındaki yazım için tıklayınız.
Microsoft’un sitesinden bulabildiğim bu son örneğe buradan ulaşabilirsiniz. Tabi ki birebir aynısı değildir. Kendime göre değiştirip yani WinForm Application olarak değiştirip çalıştırdım. ;) Örnekte Console Application olarak verilmiş.
Ayrıca bu böyle bir örnek olsun. :D
C# hakkındaki diğer derslerim için tıklayabilirsiniz.
C# GoTo Nasıl Kullanılır? dersimizde bu kadar dostlar. Diğer derslerimizde görüşmek üzere. Derslerime özel olarak hazırladığım Github Projeme buradan ulaşabilirsiniz…
Sağlıcakla ve takipte kalın. ;)
Having read this I believed it was extremely informative.
I appreciate you finding the time and effort to put this
short article together. I once again find myself spending way too much
time both reading and leaving comments. But so what, it was still worthwhile!
Hello, Thanks for comment. :)
I’m buy this theme. You can see follow this link.
I love your blog.. very nice colors & theme. Did you create this website yourself or did you hire someone to do it for you?
Plz answer back as I’m looking to design my own blog
and would like to find out where u got this from.
many thanks
It is the best time to make some plans for the future and it
is time to be happy. I’ve read this post and if I could I desire to suggest you few interesting things
or advice. Perhaps you can write next articles referring to this article.
I want to read more things about it!
Great blog! I ran across it although surfing around upon Yahoo Analyses. Many thanks
Good day very nice blog!! Man .. Beautiful .. Amazing ..
I’ll bookmark your blog and take the feeds additionally?
I am satisfied to find so many helpful information right
here within the post, we’d like develop extra techniques on this regard,
thank you for sharing. . . . . .
I couldn’t resist commenting. Very well written!
Wow, awesome weblog structure! How long have you been running a blog for?
you make running a blog look easy. The entire glance
of your site is magnificent, let alone the content!
Thanks for your nice comment.
I am really inspired with your writing abilities and also with the layout in your blog.
Is that this a paid subject or did you customize it your self?
Either way stay up the excellent quality writing,
it is uncommon to see a nice weblog like this one today..