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