Monday, November 7, 2022

Dart Ders Notlarım 25: if – if – if vs if – else if – else Derin Analiz

 

Dart Ders Notlarım 25: if – if – if vs if – else if – else Derin Analiz


    int yas = 15;

  if (yas < 1) {

    print("Bebek");

  } else if (yas < 4) {

    print("Çocuk");

  } else if (yas < 12) {

    print("Genç");

  } else if (yas < 18) {

    print("Ergen");

  } else {

    print("Yetişkin");

  }

Şimdi diyebiliriz ki ben sıfır girince bu hepsinde geçerli oluyor. Eğer ben sıfır girersem bu giriş 1,4,12 ve 18 den küçük olmaz mı? Her şart sağlanmaz mı? Aslında her şartı sağlıyor. Ama çalışma mantığını kavradık mı işin pekte öyle olmadığını göreceğiz.

Şöyle ki buradaki sistem yakalama sistemi. Burada program şartlara bizim yazdığımız sıra ile bakıyor. Bu sebeple şartları mantıklı bir şekilde yazmalıyız. Buradaki gibi sayısal ise küçükten büyüğe doğru. Her şart topluluğumuzu girerken mantıklı bir sıralamamız olması gerekiyor.  Yoksa programın yanlış bir bloğa girme ihtimali var.

Sıfır için deneyelim

Program ilk yakaladığı şartın içine giriyor ve ardından diğer şartlara bakmadan kod bloğundan dışarı çıkıyor. Diyelim ben 0 girdim.  İlk sırada 1 den küçük mü diye kontrol sağlandı. Kontrol doğru. Ne olacak. Bu şartın print’i çalışacak. Sonra ne olacak. Daha program diğer şartlara bakmadan kod bloğundan dışarı çıkacak.  //Bebek

yas < 1    

yas < 4

yas < 12

yas < 18

else

 

Üç için deneyelim

Şimdi 3 girdiğimizi düşünelim. İlk satırda 3 1’den küçük mü? Değil. İkinci satırda 3 4’ten küçük mü? Evet. Hemen oradaki bloğa girecek ve oradaki kodu çalıştıracak. Sonra kod bloğundan çıkacak. Yani diğer şartları kontrol etmeyecek. Etseydi zaten 3 girince biz sadece ilk şartı geçip sonraki her şarta girmesi gerekirdi. //Çocuk

yas < 1    

yas < 4

yas < 12

yas < 18

else

 

Dokuz için deneyelim

 

Şimdi de 9 için bakalım. Dokuz 1 den büyük orayı geçti. 4 ten büyük orayı da geçti. 12 den büyük mü? Hayır. Ne olacak o kod bloğu çalışacak ve diğer şartlara bakmadan kod bloğundan çıkacak.//Genç

 

yas < 1    

yas < 4

yas < 12

yas < 18

else

 

On altı için deneyelim

16 için bakalım. Hemen program başlayacak. 16, 1-4-12 den büyük. Yani küçük değil. Ama 18 den küçük. Şart doğrulandı. Gir kodu çalıştır bloktan çık.//Ergen

 

yas < 1    

yas < 4

yas < 12

yas < 18

else

 

Yirmi için deneyelim

 

20 için daha hızlı bakalım. 20 demek else bloğu demek.  Çok daha hızlı bakalım.

20 1-4-12 ve 18 den büyük. Hiçbir şart sağlanmadığı zaman varsa program else bloğuna bakıyor. O blok varsa oradaki kodu çalıştırıp bloktan çıkıyor ki zaten blokta başka bir şey kalmadı. Eğer else yoksa direkt bloğu komple baypas ediyor. 20 her şarttan büyük çıktığı için program else içindeki kodu ekrana yazacak. //Yetşikin

 

yas < 1    

yas < 4

yas < 12

yas < 18

else

 

Yanlış yazılmış şartlarda ne oluyor

Şimdi şartları yanlış yazdığımız bir bloğa bakalım. Diyelim ki şartları aklımıza geldikçe yazdık ve tabi hatalı oldu. Aşağıdaki gibi 18 şartını en başa çaktık diyelim. Bu blok iki durumda çalışır artık. Bir 18 den küçük olduğu durumlarda. Bir de 18 den büyük olduğu durumlarda. Çünkü alttaki hiçbir şart kontrol edilmez else hariç diğer hepsine ölü kod diyebiliriz. İki örnekle bunu görelim. Bir tane 18 den küçük bir tane de büyük örnekle bakalım neler olacak.

yas < 18

yas < 1    

yas < 4

yas < 12

else

Hatalı blok.

 

Yanlış yazımda on değerine bakalım

10 için bakalım. 10 18’den küçük mü? Evet. Hemen birinci şart sağlandı mı? Evet. Program bu şart sağlandığı için diğer şartlara bakacak mı? Hayır. İlk kod bloğuna girdi print’i bastı ve diğer bloklara bakmadan tüm bloktan çıktı mı? Evet. Ne olmuş oldu şimdi peki? Olan şey şartları doğru sırada yazmadığımız için hatalı kontrol sağlandı. Şartlar doğru yazılsaydı 10 değeri kendine en yakın 12 den küçük olduğu için 12’nin else if bloğu çalışacaktı. O bloğa program bakmadı bile. Neden? Çünkü ölü kaldı orası. CanlanamadıJ

yas < 18

yas < 1    

yas < 4

yas < 12

else

Hatalı blok.

Yanlış yazımda otuz beş değerine bakalım

Şimdi de 35 için bakalım. Bu sefer program tüm satırlara bakacak. Çünkü hatalı da yazılmış olsa hiçbir şart else bloğuna kadar sağlanamadığı için hepsine tek tek baktıktan sonra else bloğuna gidip orasını çalıştıracak program. Bu bozuk saat bile günde 2 kez doğruyu gösteriyor gibi bir şey oldu galibaJ

yas < 18

yas < 1    

yas < 4

yas < 12

else

Hatalı blok.

Hatalı yazım için kısa analiz

İki adet hatalı giriş denedik. Biri en büyük şarttan küçük diğeri de en büyük şarttan büyük iki sayı. Mantıklı bir şekilde bakınca şu gözüküyor. Şartların içinde en büyük şartı biz en başa koyunca ondan küçük tüm şartlar ölü oluyor ve o sayıdan küçük bütün değerleri kendisi direkt yakalıyor ve diğer şartların kontrol edilmesine bile gerek kalmadan program bloktan çıkıyor.

En büyük şarttan büyük her sayı için ise program bütün şartları kontrol edip else bloğuna gidiyor. Çünkü sayımız en başta bulunan en büyüğe zaten girmediği için alt sıralardaki diğer şartlara da doğal olarak girmeden ama kontrol ederek else bloğuna gidecek. Burada sıralama doğru olsaydı yine de bütün şartlar tek tek kontrol edilecekti. 

Neden her şartı if yapmadık da else if yaptık?

 

if   yas < 1    

if   yas < 4

if   yas < 12

if   yas < 18

else

Neden böyle değil?

 

if   yas < 1    

else if   yas < 4

else if   yas < 12

else if   yas < 18

else

Neden böyle.

 

Aslında ihtiyacımıza göre ikisinin de kullanılmasında bir problem yok. Problem üsttekine ihtiyaç varken alttakinin veya alttakine ihtiyaç varken üstekinin kullanılmasından ortaya çıkıyor genelde. Ama bazen aynı işi ikisi de yapabiliyor. O zaman da tercih size ve tecrübenize kalmış demektir.

Burada önemli olan çalışma felsefelerini bilmek ve ihtiyaca göre gerekli olanı kullanmak. Aslında bu yapılardan biri diğerinin yaptığı işi yapabiliyor ise o zaman kod tasarrufu, zaman tasarrufu, işlemci tasarrufu vb. durumları göz önüne alarak tercihimizi yapmamız gerekiyor.

Şimdi çalışma felsefelerine bakalım. Önce üstten beri açıklaya geldiğimiz else if yapısına bakalım.

else if - else if - else

else if yapısını kullanırken bizim amacımız şartlarımızdan sadece biri doğru olunca onun sonucuna göre bir işlem yapmak. Burada üstteki kodu düşünebiliriz. Biz orada kişinin yaşam dönemini buluyoruz. Bu bizden sadece bir şartın doğru çıkmasını gerektirecek bir kod yapısı ister. Çünkü bir kişi hem bebek hem yetişkin olamaz. En sonunda sadece tek bir şartın geçerli olduğu ve o şarta göre programın yapması gereken bir şey varsa böyle durumlarda else if ile kodlama yapıyoruz. Bu şartları da doğru bir sıralamada yazmamız gerekiyor orasını artık biliyoruz. Tekrar ifade edeyim sadece bir şart gerekli ve o şart sağlandı mı diğer şartlara program bakmadan o bir şartın kod bloğunu çalıştırıp hemen kod bloğundan çıkan bir yapı bu yapımız. Bu ve benzeri durumlarda else if yapısını kullanabiliriz.

if – if – if

Eğer her şartı if ile kodlayacağımız yapıyı kullanacaksak bizim amacımız şartlardan sadece biri değil de birden fazlası doğru olunca doğru olan bu birden fazla şart için bir şeyler yapmak. Burada şöyle bir örnek verebiliriz.

Kurgumuz şu şekilde. Diyelim ki Yükseköğretim Kurumu yurt dışı Üniversitelere Erasmus ile öğrenci yolluyor. Bunun için bir puan değişkeni lazım bize. Düşününki bu puan bir sürü çarpandan oluşuyor orası bizi ilgilendirmez biz direkt puanın son hali bize gelmiş gibi işlem yapacağız. Puan 90 ve üzeri ise tüm Üniversitelere geçiş hakkı oluyor, A-B-C-D-E kalitedeki hepsine. 80 ve üzeri B-C-D-E kalite. 70 ve üzeri C-D-E kalite. 60 ve üzeri D-E kalite. 50 ve üzeri E kalite olsun. Daha aşağı puanlarda ise geçiş hakkı bulunmuyor.

Şimdi aşağıda else if ile sözde koda benzer yazımına bakalım. A-B-C-D-E aynı zamanda fonksiyonlarımızın da isimleri olsun. Her bir harfin içinde onlarca fonksiyon olduğunu unutmayalım. Burada gördüğümüz gibi her şartın yanına fonksiyonlarımızı ekledik. Doksandan büyük olana hepsini ekleyerek alt alta giderek her satırda bir fonksiyonu çıkardık. Mesela E fonksiyonun her şartta çağırdık. Esas mesela her şartta yazmış olmamız. Çalışma mantığına bakalım. Örneğin 55 girdik. Şartlar sağlanmadığı için puan>=50 ye kadar olan şartlar atlandı. Puan>=50’de şart sağlandı sadece E fonksiyonları çalıştı. Diyelim 95 girdik. İlk şart direkt sağlandığı için o bloktaki kodlar çalıştı ve program bloktan dışarı çıktı. Birde 45 girildi diyelim. Hiçbir şart sağlanmadığı için en sona eklediğimiz else bloğu çalışır ve ekrana geçiş hakkınız yoktur yazılır.

if        puan >= 90 A-B-C-D-E

else if   puan >= 80 B-C-D-E

else if   puan >= 70 C-D-E

else if   puan >= 60 D-E

else if   puan >= 50 E

else              Geçiş Hakkınız Yoktur…   

else if yapısı bu şekilde.

 

Aradaki farkı daha iyi anlama adına else if halini yukarda yazdık ve açıkladık. Şimdi de aşağıda if ile kodların sözde yazımına ve açıklamasına bakalım. Fonksiyonların mantığı yukarıda dediğimiz gibi olsun. Burada en önemli nokta program bizim girdiğimiz her puan değeri için her satırdaki şartı tek tek kontrol edecek ve uygun olan tüm şartlardaki fonksiyonları çalıştıracak. Şimdi 55 girelim. Şartları kontrole başladı program. Hepsine baktı ve sadece puan >= 50 şartı sağlandığı için sadece E fonksiyonu çalışacak. Şimdi 95 girelim. 95 için ilk if çalıştı, ikinci if çalıştı ve bunun gibi ilk 5 adet if kodumuz çalışacaktır. En sondaki puan < 50 hariç. Bütün if’ler çalıştığı için A-B-C-D-E fonksiyonları hepsi çalışmış olacak. Şimdide 45 girelim ve sadece son if şartı doğru olduğu için sadece o if bloğu çalışır ve geçiş hakkınız yoktur yazar ekrana.

 

if      puan >= 90 A

if      puan >= 80 B

if      puan >= 70 C

if      puan >= 60 D

if      puan >= 50 E

if      puan < 50 Geçiş Hakkınız Yoktur…***

if yapısı bu şekilde.

 

*** bu satırda else olmaz çünkü bütün if’ler ayrı ayrı kontrol ediliyor. Yine burada puan>=0 diyemeyiz. Çünkü o zaman 95 girince bu şartı da sağladığı için kişiye hem her şeyi tercih edebilirsiniz dönecek hem de geçiş hakkınız yoktur diyecek. Bunun için puan < 50 dememiz gerekiyor orada.

if – if – if vs else if – else if – else Sonuç

Şimdi yazılım iki kod bloğunu da çalıştırır. Yazılımın kodlamayı nasıl yaptığımızla bir alıp veremediği olmaz. Gelelim biz neye göre tercih yapacağız.

Şimdi şöyle bir gelenek var. Bir if bloğu else if’lerle birlikte sadece bir ana şartı gündemine alsa daha iyi gibi. Sürekli alt alta if’leri dizeceksek gelenek derki her bir if ayrı bir şartın başlangıcı olsun. Bir if ile başlıyorsak ilgili diğer şartları o if içerisinde tanımlamak daha bir tercih sebebi.

Lakin dediğimiz gibi her şey gelir sizin ihtiyacınızı en verimli şekilde çözen yola dayanır. Bunu tecrübeyle, araştırmayla vb. daha başka yollarla siz kendiniz bulacaksınız.

Hiç olmadı deneme yanılma yoluna gideceksiniz. Zamanla zaten istediğiniz kıvama geleceksiniz. O zaman şu anda ne yapmalıyım daha önemli oldu. Oda sizin zamanla geleceğiniz kıvama şuanda gelmiş olan bir usta bulmak. Araştırmak dediğimiz olay ustalığa gelinince bırakılmıyor. O ömür bitene kadar bitmeyen bir şey. Orası ayrı zaten. Her zaman araştırın. Ama kendisini bu işe vermiş ciddi anlamda ilerlemiş ve insanlara yardım etmekten zevk alan biri bulursanız o zaman bu işler tadından yenmez oluyor.

İstisnaları olmakla birlikte bir kişinin yol göstermesi onun yıllarca edindiği tecrübeyi size bir anda aktarması gibi bir şey zaten. Arının binlerce ağaçtan yüzlerce günde yaptığı balı bir anda yemek gibi bir şey oluyor.

Tabi bu iş böyle gözüküyor diye araştırmayı bırakırsanız olan yine size olur. Hem siz kendiniz faydalandığınız kadar başkalarına da faydalı olmalısınız ilerleyen zamanlarda. Bunu yapmaz iseniz adalet gelir sizi bulur ve emin olun belli bir seviyenin üstüne çıkamazsınız. İnsan olmak insan kalmak güzeldir…

Şimdi de sayı doğrusunda else if şart yakalama sistemine renkli olarak bakalım.

yas < 1   bebek  

yas < 4   Çocuk

yas < 12  Genç

yas < 18  Ergen    

else      Yetişkin

0 1…3 4…11 12…17 18 19…

yas < 1  yas < 4   yas < 12    yas < 18        else

 

https://gist.github.com/metulangu/7a6a9ffe8679296541724bf00ba73ae6


Share This

0 comments:

Soru, Görüş, Öneri ve Eklemek İstediklerinizi Yazabilirsiniz...