Şimdi, mantık konusunu anladığımıza göre sıra ‘if – else if – else’ yapısını öğrenmekte. Bu yapıyı öğrendikten sonra bir önceki blogda anlattığım her şey kafanıza çok güzel oturacak ve daha efektif kodlar yazmayı öğreneceksiniz.
Biz bu yapıyı, birden fazla koşulu aynı anda yönetebilmek için kullanıyoruz. Zaten mantık konusundan da hatırlayacağınız üzere birden fazla koşul ifadesi verebiliyorduk. Burada, 'if' kalıbı ile bu koşulların gerçekleşmesi durumunda Go'ya istediğimizi yaptırabilme gücüne erişiyoruz.

Her şeyden önce, ‘if’ yapısının syntax’ını öğrenmemiz gerekiyor. Kutulara dikkat edin; ilk önce ‘if’ yazıyoruz, sonra koşulumuz neyse onu yazıyoruz, son olarak süslü parantez (AltGr + 7) açıyoruz ve kodlarımızı o süslü parantezlerin içerisine yazıyoruz.
Yukarıdaki kodu Türkçe bir cümleyle anlatacak olursak şöyle diyebiliriz: “Eğer 1, 1’e eşitse kodları çalıştır.” Şimdi, mantık konusunu bildiğimize göre biraz karışık bir yapı oluşturalım ve bunu anlamaya çalışalım.

Yukarıdaki koda bakalım. İlk önce ‘if’ dedik daha sonra koşulumuzu yazdık. Koşulumuzu, “2 rakamı, 1 rakamına eşit değilse veya 4 rakamı 15 sayısından büyükse ya da ona eşitse” şeklinde ifade edebiliriz. Daha sonra süslü parantezlerimizi açtık ve içerisine ‘fmt.Println(“Hello World”)’ yazdık. Bu kodun tam olarak Türkçe karşılığı şudur: “Eğer 2 rakamı 1 rakamına eşit değilse veya 4 rakamı 15 rakamından büyükse ya da ona eşitse ekrana ‘Hello World’ yazdır.”
Terminale baktığınızda, ekrana ‘Hello World’ yazdırdığını görürsünüz. Peki burada ne oldu? Go, ilk önce ‘if’ kodunu gördü ve burada bir koşul olduğunu anladı. Daha sonra koşulları kontrol etti; soldaki koşulun ‘true’ olduğunu anladı çünkü 2 rakamı gerçekten de 1 rakamına eşit değildir. Daha sonra aradaki sembole baktı ve ‘||’ sembolünü gördü. Go, bu sembolün ‘veya’ anlamına geldiğini biliyor. Hemen bir sonraki koşula baktı ve o koşulun ‘false’ olduğunu anladı çünkü 4 rakamı, 15 sayısından küçük veya ona eşit değil. Sembol || ise, tek bir koşulun ‘true’ olması yeterliydi. Dolayısıyla ekrana ‘Hello World’ yazdırdı. Peki, ikisi de ‘false’ olsaydı ekrana bir şey yazdırır mıydı?

Bu sefer, birinci koşulumuz da ikinci koşulumuz da yanlış yani ‘false’. Bu durumda ekrana herhangi bir yazı getirilmedi; yani fmt.Println(“Hello World”) kodu çalışmadı. Buradan ne anlayacağız? Demek ki eğer koşul sağlanmıyorsa, koşulun altındaki komutlar çalıştırılmıyor. Bu nokta çok önemlidir.
Şimdi, işin içine birkaç değişken katalım mı?

Sakin olun, hepsini anlayacaksınız. En üstteki kırmızı kutuya bakın; artık değişken atamanın ne olduğunu biliyoruz. ‘number1’ ve ‘number2’ adında iki farklı değişken atadık.
Daha sonra ‘if’ dedik ve koşulumuzu yazdık. Koşulumuz ‘number1 + number2 < 20’ şeklinde. Yani “eğer number1 ve number2 değerlerinin toplamı 20’den küçükse…” şeklinde cümle kurabiliriz.
Bir alt tarafa baktığımızda ‘number1++’ şeklinde saçma sapan bir şey görüyoruz. Bu kod aslında, “number1 değişkenini bir arttır” demek oluyor; kullanımı o şekilde oluyor. Yani ‘number1’ değişkeninin değeri 5 iken o satırdan sonra ‘number1’ değişkeninin değeri 6 oluyor. Cümlemizi yenileyelim: “eğer number1 ve number2 değerlerinin toplamı 20’den küçükse number1 değişkeninin değerini bir arttır.” Harika.
Son satırımızın ne anlama geldiğini biliyorsunuz; number1 değişkeninin yeni değerini yazdırıyoruz. Cümlemizi tekrar güncelleyelim: “eğer number1 ve number2 değerlerinin toplamı 20’den küçükse number1 değişkeninin değerini bir arttır ve bu değeri ekrana yazdır.”
İşte, yukarıdaki değişik kod yapısı tam olarak bu işi yapıyor. Şimdi, daha sade işlemler yapalım istiyorum.

number1 ve number2 isimli iki değişken atadık ve ‘answer’ adlı değişkene, number1 ve number2 değişkenlerinin toplamını atadık. Yani artık az önceki gibi ‘if number1 +
number2 < 20…’ yazmak yerine ‘if answer < 20…’ şeklinde yazabiliriz.
Koşulumuzu şöyle anlatabiliriz: “Eğer answer adlı değişkenin değeri 20’den küçükse answer değişkeninin değerini ekrana yaz.” İşlemimiz gayet başarılı. Peki, bu koşul sağlanmazsa ne olacak?

Herhangi bir sonuç almadık. Çünkü değişkenlerimizin toplamı 15 ediyor ve bu sayı 20’den büyük değil. Koşulumuzu, ‘answer > 20’ olarak değiştirdik. Yani artık sonucumuz 20’den büyük olmalı fakat bu koşul sağlanmadığı için ‘if’in içerisindeki kod çalışmadı.
İşte, her koşulun vereceği cevabı görmek için sürekli 'if' kullanmayalım diye 'else' diye bir kavram ortaya çıkmış. İki olasılık içeren durumlar için ‘if’ kalıbına ‘else’ kalıbı eklenmiş. Hemen görelim:

Az önceki kodun hemen altına, ‘else’ diye bir şey ekledim. ‘else’ yine İngilizce’den gelir ve Türkçe’ye ‘değilse?’ şeklinde çevirilebilir. Burada Go’ya dediğimiz şey; “Eğer ‘if’ içerisindeki koşul sağlanırsa kodları çalıştır ama eğer koşul sağlanmazsa bir alt komuta yani ‘else’ kısmına geç ve oradaki komutları çalıştır.” ‘else’ için herhangi bir durum tanımlaması yapmıyoruz çünkü kendisi, ‘if’ ile tanımlanmayan diğer bütün olasılıklar için geçerlidir.
Koşulumuz, answer değişkeninin 20’den büyük olması idi fakat şu an answer, 20’den büyük değil. Dolayısıyla ‘if’ kısmı çalışmadı ve direkt olarak ‘else’ kısmına geçildi ve oradaki kodlar çalıştırıldı.
Bu arada, ‘else’ kısmının syntax’ına bakın. ‘if’ kısmında, en sondaki süslü parantezin yanına ‘else’ yazıp tekrar süslü parantez açıyoruz ve ‘else’ kısmına ait olan kodları da kendi süslü parantezleri içerisine yazıyoruz. Buradan da anlayacağımız üzere, her if veya else kod parçacığının kendi Scope'u mevcuttur. Dışarıda tanımlanmayan bir değişken sadece if değişkenine tanımlanmışsa kod sayfasının geri kalanında bu değişkene erişilemez. Scope kavramını unuttuysanız tıklayın.
Eğer 'if' içerisindeki koşul sağlanıyor olsaydı bu sefer de 'else' kısmı çalışmayacaktı. Hemen onu da görelim:

‘if’ koşulunu tekrar değiştirdim ve bu seferki koşulumuz ‘answer, 20’den küçükse’ oldu. 5 + 10 = 15; evet, küçük. O zaman bu koşulda ‘if’ kısmı çalışacak, ‘else’ kısmı çalışmayacaktır.
Az önce, iki olasılık için ‘else’ kalıbının eklendiğini söylemiştim. Peki, ya daha fazla olasılık olsaydı o zaman ne yapacaktık? Örneğin, "notu 50'den küçükse kaldı ,notu 50 ise şartlı geçti, notu 50'den büyükse geçti." İşte, bunun için ‘else if’ kalıbı geliştirilmiş.

‘number2’ değişkeninin değerini 15 yaptım ki toplamı 20 olsun. Aşağıda ‘else if’ yapısını görüyorsunuz ve ‘else if’ kısmının koşulu ‘answer 20’ye eşitse…’ şeklindedir. Burada, ‘else if’ yazarak onlarca durum oluşturabiliriz. Dikkat etmemiz gereken tek şey; ‘if’ kısmının en üstte, ‘else’ kısmının da en altta olmasıdır. ‘else
if’ yapılarını, ‘if’ ve ‘else’ arasına yerleştiriyoruz. Hemen, hava durumu ile alakalı ufak bir proje yapalım; konu pekişsin.

Lütfen syntax yapısına dikkat edin yoksa hata alırsınız. Blokların arasını biraz açtım ki daha net görebilesiniz.
Şimdi, ‘hava_durumu’ adında bir değişken atadım ama içerisi boş yani şu an için herhangi bir değeri yok. ‘if – else if – else’ yapılarına bakalım. Güneşli, Yağmurlu, Bulutlu ve diğer olasılıklar şeklinde bazı koşullar belirledim.
Yukarıdaki değişkenin değerini ‘Güneşli’ olarak değiştirirsem ‘if’ kısmı çalışacaktır. Çünkü 'if hava_durumu == "Güneşli"' şeklinde bir kod yazdık ve bu kodun anlamı: "Eğer hava_durumu, Güneşli ise..." şeklindedir. Diğerleri de aynı şekildedir;
Değeri, ‘Yağmurlu’ olarak ayarlarsam ilk ‘else if’ kısmı çalışacaktır.
Değeri, ‘Bulutlu’ olarak ayarlarsam ikinci ‘else if’ kısmı çalışacaktır.
Son olarak; değeri, o üç durumdan farklı bir durum olarak ayarlarsam da ‘else’ kısmı çalışacaktır. Yani hava_durumu değişkenine örneğin Sağanak Yağışlı dersem de 'else' kısmı çalışacak, Karlı desem de 'else' kısmı çalışacak. Hatta şimdiki hâli ile çalıştırırsak da ‘else’ kısmı çalışacak çünkü değişkenin değeri, diğer koşullar ile uyuşmuyor. Buradan da, ‘else’ kısmının her zaman ‘diğer olasılıklar için’ çalıştığını anlamalısınız.
Bahsettiğim ‘else’ kısmının gerçek hayatta kullanım alanlarından biri, geçersiz kullanıcı girdilerini kullanıcıya bildirmektir. Örneğin kullanıcının seçmesi gereken sadece iki durum varsa ama kullanıcı bambaşka bir durum seçmek istiyorsa burada ona ‘else’ ile engel olabilirsiniz (Örneğin: “geçersiz giriş denemesi” şeklinde bir yazı yazırabilirsiniz). Henüz kullanıcıdan girdi almayı öğrenmedik bu blogdan sonraki konumuz o olacak. Dediğimi bilin yeter.

Az önce dediğimiz gibi; değişkenin değeri herhangi bir koşulla uyum sağlamadığı için direkt olarak ‘else’ kısmı çalıştı. Dilerseniz değişkenimize ‘Yağmurlu’ değerini verelim.

Değiştirdik. Değerimize uygun olan koşul yapısı başarıyla çalıştı. Lütfen bu konu hakkında anlattığımız her şeyi ama her şeyi teker teker deneyin. ‘if’ kullanmayan yazılımcı yoktur; siz de çok fazla kullanacaksınız.
Yayınlanma Tarihi: 2022-07-26 15:09:10
Son Düzenleme Tarihi: 2022-07-29 00:08:24