none
Goto Neden Kullanmamalıyız ? RRS feed

  • Genel Tartışma

  • Merhaba Msdn sakinleri, aklımı kurcalayan bir soru var. c# dili içerisinde go to geliyor. Neden go to yu kullanmamalıyız. Kullanmanın avantajı ve dezavantajları nedelerdir?
    24 Mart 2016 Perşembe 07:32

Tüm Yanıtlar

  • Yerine göre,

    Kullanıcı arayüzü olan (Formlar, web siteleri vs.) uygulamalarda olaylar kullanıcıların seçimlerine göre yönlenir. Bu durumda Event/Delegate yapısı kullanılarak; "falanca şey olursa, şunu-şunu yap" şeklinde yapı oluturulur. Örneğin "button'a basınca verileri listele". Goto kullandığın zaman tek method içinde kalacağın için diğer eventlerin yada methodların çağırılma olanağı kalmaz.

    Ama kullanıcı arayüzü olmayan (windows servisleri gibi) uygulamalarda kullanılabilir. Ama OOP gibi çok gelişmiş yazılım teknolojileri varken pek gerek kalmaz buna. 

    "Kullanmamalıyız" yanlış, "gerek kalmaz" daha doğru bir kelime


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    24 Mart 2016 Perşembe 07:42
    Moderatör
  • Okunaklılık açısından bakacaksak :

    Algoritmaları ya da iş listelerini (günümüzde pek algoritma geliştirdiğimiz söylenemez) yazarken bunun ne iş yaptığı insan tarafından da rahatlıkla anlaşılsın isteriz. İsteriz ki hem bizden sonraki programcı "enkaz devraldık, baştan yazmamız lazım" demesin -ama sen efsane kod yazsan da diyecek. Hem de ilerideki bir zamanda arıza çıktığında -çıkacak. O arızayı oluşturan iş akışını görmek isteriz. 

    Goto kullandığına akışta takip edilmesi zorlaşan sıçramalar gerçekleşir. Bir iki tane goto kullandığında çok sıkıntı olmaz ama tüm akışı buna göre yaptıysan o kod ne okunur ne de hata düzeltilmesi mümkün olur. Ama kolaylık olsun diye iç içe olan döngüleri hızlıca kırmak için kullanabilirsin. Gereksiz katı olmanın faydası yok.

    GOTO dan daha fazla kaçınılması gereken şeyler var. 1. WebBrowser nesnesi 2. String birleştirme ile yapılan SQL cümleleri.

    --- Konu dışı ---

    Fakat gariptir ki insanlar bir şekilde goto dan kaçınırken gereksiz nestingden (yuvalama?) kaçınmazlar. Gereksiz yere sırf havalı diye recursive (özyinemeli) kodlar yazarlar (yazmamaya dikkat edin). Değişkenlerine düzgün isimler vermezler. (TextBox24 gibi...) Dilin, platformun güçlü kanıtlanmış yeteneklerini kullanmaktansa kendi kodlarını yazmakta diretirler (.net deki binding mekanizmaları gibi) OOP un adını bilirler bir tane class yazdıklarında OOP prensiplerine göre uygulama geliştirdiklerini sanırlar.


    24 Mart 2016 Perşembe 07:59
  • @Cihan; bu da ülkemizde bu işin kulaktan dolma, ezbercilik şeklinde öğrenildiği sonucu ortaya çıkıyor sanırım.

    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    24 Mart 2016 Perşembe 08:09
    Moderatör
  • @Cihan; bu da ülkemizde bu işin kulaktan dolma, ezbercilik şeklinde öğrenildiği sonucu ortaya çıkıyor sanırım.


    Ezber ve sorgulamama. Adam "böyle öğrettiler, doğrusu bu" yaklaşımıyla ilerliyor.

    Sen bir yerde goto kullanırsın...
    -Ama hocam siz goto kullanmışsınız?
    -Yani?"
    -Kötü bir şey o!
    -Evet, kötü bir şey. Peki ben burada goto kullandığımda yaşanacak sıkıntılar nedir? Açıklar mısın?
    -Okulda/Bahçede/Bir abimler yasak o, kullanmayın dediler bize.

    Adam webbrowser ile düğmeye tıklatmaya çalışır...

    - Canım kardeşim, o iş öyle yapılmaz gel anlatayım sana doğrusunu
    - Ben böylesini biliyorum hiç yorma beni, bununla nasıl tıklatırım onu de yeter bana. 



    24 Mart 2016 Perşembe 08:38
  • Deleted
    24 Mart 2016 Perşembe 11:56
  • GoSub vardı birde

    10 LET A = 100
    20 GOSUB 50
    30 PRINT A
    40 END
    50 A = A + (A * 18 / 100)
    60 RETURN
    gibi bişeydi. Sub Routine derdik sanırım


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com


    24 Mart 2016 Perşembe 19:47
    Moderatör
  • on goto/gosub'ı da unutmamak lazım
    24 Mart 2016 Perşembe 19:50