if DEYİMİ
if deyimi, Swift dilinde şartlı dallanma (conditional branching) adı verilen işlemi gerçekleştiren bir deyimdir.
Şartlı dallanma, herhangi bir programlama dili için temel kontrol yapısıdır.
Şartlı dallanma işlemi sayesinde, bir program, kararlar alma imkanına kavuşur; bir ifadenin sonucuna göre, bir komutlar dizisinin icra edilip edilmeyeceğine karar verebilir.
İfadenin değeri, bir icradan diğerine değişebileceği için, bu özellik bir programa farklı verilere karşı farklı şekillerde davranma imkanı sağlar.
Swift dilinde şartlı dallanma if ve else anahtar sözcükleri ile gerçekleştirilir. if deyiminin en basit şekli için yazılış biçimi aşağıdaki gibidir:
if ifade { deyim1;}
deyim2;
Burada ifadenin değeri doğru (true) ise deyim1 icra edilir sonra icra deyim2’ye geçer. İfadenin değeri yanlış (false) ise bu durumda da doğrudan deyim2’ye geçilir. İfadenin değeri yanlış ise deyim1 icra edilmeyecektir.
Aşağıda if yapısını açıklayan bir akış diyagramı verilmiştir
- if deyimi için akış diyagramı(flow chart)
Swift’te, doğru ve yanlış’ın ne anlama geldiğini belirtmekte yarar vardır.
Swift’te, doğru (true) karşılığı olarak, Bool tipteki true değeri geçerlidir.
İfadenin yanlış (false) olması içinse değerinin Bool tipinde false olması gerekir.
If deyimi else sözcüğü ile birlikte kullanılırsa aşağıdaki yazılış biçimi kullanılır:
if ifade {deyim1 ;}
else { deyim2;}
deyim3;
...
Bu durumda, ifadenin değeri doğru ise deyim1 icra edilir ve sonra deyim3’e geçilir. İfadenin değeri yanlış ise, bu durumda da deyim1 atlanarak doğrudan else’i izleyen deyim2’ye geçilecek ve bu icra edildikten sonra da deyim3 ile devam edilecektir.
Aşağıda bu yapı ile ilişkili bir akış diyagramı verilmiştir.
- if else deyimi için akış diyagramı (flow chart)
if deyiminde, ifadenin değeri doğru olduğu zaman sadece deyim1 gibi tek bir deyim değil de bir deyimler grubunun icra edilmesi isteniyorsa bu durumda bu deyimler grubu { } sembolleri ile blok içine alınmalıdır:
if ifade
{ deyim1;
deyim2;
..
deyim_n; }
deyim_x;
..
Bu durumda ifade doğru ise deyim1,deyim2,..deyim_n ile belirtilen deyimler grubunun tümü icra edilerek deyim_x’e geçilecektir; ifade yanlış ise de bu durumda if’e ait deyimler bloğu atlanarak doğrudan deyim_x’e geçilecektir.
Aynı şey if else yapısı için de söz konusudur:
İf ifade {
Deyim1;
Deyim2;
..
deyim_n;}
else {
deyim_n+1;
deyim_n+2;
..
deyim_m;
}
deyim_k;
...
Yukarıdaki yapıda, ifade doğru ise, deyim1, deyim2, .., deyim_n icra edilerek deyim_k’ya geçilecek, ifade yanlış ise bu durumda da,
if içindeki deyimler atlanarak sadece deyim_n+1, deyim_n+2, .., deyim_m icra edilerek programın icrası daha sonra deyim_k’ya erişecektir.
ÖRNEK:
Bu basit programda t’nin değeri 4’ten büyük olduğu için if’i izleyen print icra edilmiş ve ekrana aaa değeri yazdırılmıştır.
BAŞKA BİR ÖRNEK:
Burada a değişkeninin değeri 16 olduğu için if’in aralık kontrolü sonucunda, “SAYI 10-20 aralığındadır” mesajı elde edilmiştir.
if-else-if BASAMAK YAPISI
Birbirini izleyen çok sayıda koşul kontrolünü gerçekleştirmeye yarayan bir yapı if-else-if basamağı adını alır ve yazılış biçimi aşağıdaki gibidir:
İf ifade1
{Deyim1;}
else if ifade2
{Deyim2;}
else if ifade3
{Deyim3;}
...
else
{Deyim_n;}
Deyim_n+1;
Bu yapı şu şekilde çalışmaktadır:
Önce ifade1 kontrol edilir; bu ifade doğru ise, Deyim1 icra edilir ve sonra Deyim_n+1’e geçilir.
İfade1 yanlış ise, o takdirde, ifade2 kontrol edilir. Bu ifade doğru ise, bu durumda sadece Deyim2 icra edilir ve sonra Deyim_n+1’e geçilir.
İfade2 yanlış ise, o takdirde, ifade3 kontrol edilir. Bu ifade doğru ise, bu durumda sadece Deyim3 icra edilir ve sonra Deyim_n+1’e geçilir.
Bu işlemler daha fazla sayıda else if bulunduğu takdirde aynı şekilde devam eder.
if’ler ile kontrol edilen ifadelerin tümü de yanlış ise, bu durumda programın kontrolü else’i izleyen Deyim_n’e geçer ve bu deyim icra edilir. Daha sonra kontrol Deyim_n+1’e geçecektir.
Yukardaki yapı içinde, Deyim1, Deyim2, ..., Deyim_n ile belirtilen birimler tek bir deyimden ibaret olabileceği gibi, { } sembolleri içine alınmış deyimler grubundan da oluşabilir.
ÖRNEK:
Bir üniversitede, sayısal not verildiğine göre harf notu aşağıdaki tabloya göre hesaplanmaktadır:
SAYISAL NOT | HARF NOTU |
---|---|
<50 | F |
>=50 ve <70 | C |
>=70 ve <85 | B |
>=85 | A |
Buna göre sayısal not verildiğine göre harf notunu hesaplayan bir Swift kodu oluşturunuz:
Problemin cevabı olan kod aşağıdadır:
Burada sayısal not 78 olarak verilince harf notu doğru olarak B şeklinde hesaplanmış ve yazdırılmıştır.
Switch /case YAPISI
Bir programda çok sayıda koşul kontrolü ve bunların sonucuna göre gerçekleştirilmesi gereken işlemler varsa, if-else, yapıları ile akışın izlenmesi zorlaşabilir.
Bu durumlar genellikle switch deyiminin kullanılmasının gerekli olacağı durumlardır. Switch deyimi, tek bir ifadenin değerine göre, sınırsız sayıda icra yolu belirleme imkanı tanıyan bir komuttur.
switch sözcüğünden hemen sonra gelen ifade parantezler içinde ve bir tamsayı ifade olmalıdır. Yani char, short, int, long, byte,sbyte, ushort, uint, ulong olabilir fakat float, double veya long double olamaz.(C için, Kernighan & Ritchie standardı, ifadenin int tipinde olmasını gerektirir.)
Switch deyiminin çalışma biçimi basittir. Switch ifadesi hesaplanır; sonuç hangi case’i izleyen sabitle çakışıyorsa, programın kontrolü o case’i izleyen kısma geçer.
Case sabitlerinin hiçbiri ifade ile uyuşmuyorsa, programın akışı default’u izleyen kısma geçer. (bu kısım mevcutsa) Default’un, en sonda olması şart değildir. Fakat en sona koymak iyi bir programlama stilidir.
İki case sabiti aynı değeri alamaz.
C/C++ DİLİ: Switch/case yapısında, programın kontrolünün ifadenin değerine göre case seçeneklerinden sadece birini icra edip bundan sonra switch/case yapısını terketmesi isteniyorsa bu durumda her case seçeneğinden sonra break komutu yerleştirilmelidir.
C# DİLİ: Her case’den sonra break kullanılması zorunludur.
Swift dili: break konulmasına ihtiyaç yoktur.
ÖRNEK:
Aşağıdaki uygulamada, sec değişkeninin değerine göre farklı bir case icra edilmektedir.
Örnek kodda sec değeri “B” olarak atandığı için sonuçta “B SINIFI DERGİLERİN LİSTESİ” ifadesi yazdırılmıştır.
ÖRNEK:
Aşağıda bir karakterin rakam olup olmadığını kontrol eden bir switch case yapısı verilmektedir:
let kar: Character = "3"
switch kar{
case "0":
print("RAKAM... 0")
case "1":
print("RAKAM... 1")
case "2":
print("RAKAM... 2")
case "3":
print("RAKAM... 3")
case "4":
print("RAKAM... 4")
case "5":
print("RAKAM... 5")
case "6":
print("RAKAM... 6")
case "7":
print("RAKAM... 7")
case "8":
print("RAKAM... 8")
case "9":
print("RAKAM... 9")
default:
print("KARAKTER RAKAM DEĞİLDİR...")
}
PROGRAMIN ÇIKTILARI:
RAKAM... 3
Program ended with exit code: 0
Kar değişkeni aşağıdaki gibi girilsin:
let kar: Character = "d"
Bu durumda programın çıktısı aşağıdaki gibi olacaktır:
KARAKTER RAKAM DEĞİLDİR...
SWITCH CASE İÇİN BAŞKA BİR ÖRNEK
var hiz = 75
switch hiz {
case 0:
print("DUR")
case 1...39:
print("YAVAŞ")
case 40...69:
print("NORMAL")
case 70...100:
print("HIZLI")
default:
print("HATALI VERİ")
}
hiz = 35
switch hiz {
case 0:
print("DUR")
case 1...39:
print("YAVAŞ")
case 40...69:
print("NORMAL")
case 70...100:
print("HIZLI")
default:
print("HATALI VERİ")
}
PROGRAMIN ÇIKTISI
HIZLI
YAVAŞ
Program ended with exit code: 0
DİĞER BİR ÖRNEK
var (i, j) = (5, -2)
switch i {
case 1:
j = 1
case 2, 3:
j = 2
case 4:
j = 4
fallthrough
case 5:
j++
default:
j = Int.max
}
print("i=\(i)")
print("j=\(j)")
PROGRAMIN ÇIKTISI
i=5
j=-1
TUPLE İLE BİRLİKTE SWITCH CASE ÖRNEĞİ
var tuple: (Int, Int)
var sonuc: String
tuple = (2,5)
let (x,y) = tuple
switch tuple {
case (let x, let y) where x > y:
sonuc = "DAHA BÜYÜK"
case (let x, let y) where x < y:
sonuc = "DAHA KÜÇÜK"
default:
sonuc = "EŞİT"
}
print("\(x)...\(y).....\(sonuc)")
PROGRAMIN ÇIKTISI
2...5.....DAHA KÜÇÜK
SWITCH CASE KOMUTUNDA WHERE SÖZCÜĞÜ
Swift dilinde switch-case komutu içinde where sözcüğü kullanılarak ilave koşul kontrolü gerçekleştirilebilir.
ÖRNEK:
let fonk = (3,4,5)
switch fonk{
case let(a, b,c) where a * a + b * b == c*c:
print("PITHAGORAS ÖZELLİĞİ SAĞLANIYOR")
case let (a, b,c) where a - b < c:
print("UCGEN ÖZELLİĞİ SAĞLANIYOR")
case let (a, b,c):
print("a,b,c arasında herhangi bir özellik yok")
}
Programın çıktısı ise aşağıdadır:
PITHAGORAS ÖZELLİĞİ SAĞLANIYOR
Bildiğiniz gibi, kontrol komutları bilgisayar programı içinde koşullu işlem yapma, döngü (loop) oluşturma, normal akışı değiştirme gibi işlevleri yüklenmişlerdir.
Swift dilinde de C diline benzer döngü kontrol komutları mevcuttur.