Anahtar Durum İfadeleri (Switch Case)
Switch ifadesi,çoklu seçenekler içinde anahtar açıp kapatma usulüyle çalışan bir kodlama yapısıdır. Basit bir ifade ile demiryolu makası gibi düşünülebilir. Açık olan anahtar kısmından işlemi devam ettirir.

Switch Türleri
Go dili, iki tür anahtar deyimini destekler:
- İfade Switch
- Tip Switch
İfade Switch
İfade switch, C, C++, Java dilindeki switch ifadesine benzer. İfadenin değerine bağlı olarak yürütmeyi kodun farklı bölümlerine göndermenin kolay bir yolunu sağlar.
Syntax:
switch optstatement; optexpression{
case expression1: Statement..
case expression2: Statement..
...
default: Statement..
}
SWITCH YAZIM KURALLARI
switchifadesi sonrasında yazılanoptexpressionveoptstatementopsiyonel ifadelerdir.- Eğer hem
optexpressionhem deoptstatementifadede mevcut ise ikisinin arasına noktalı virgül;işareti koymak gereklidir.- Eğer
switchherhangi bir ifade içermiyorsa, derleyici ifadenintrueolduğunu varsayar.optstatementdeğişken tanımlamaları, artış ya da atama durumları, fonksiyon çağrıları vb. gibi basit durumları içerir.- Eğer değişken
optstatementiçerisinde görüntülenirse, değişkenin aralığı switch ifadesi ile sınırlıdır.switchvecaseifadeleri dahili olarakbreakile durdurulmaz. Fakat şart sağlandığında otomatik olarak anahtar değeri değişir ve bir sonraki aşamaya geçilir.defaultifadesiswitchifadesinde isteğe bağlı olarak kullanılır.caseifadesi birden fazla değişken içerirse bu ifadeler virgül (,) ile ayrılırlar.- Eğer
caseifadesi herhangi bir ifade içermiyorsa, sistem bu ifadenin değerinintruekabul eder.
İlk örnek ifademizi yazalım :
package main
import "fmt"
func main(){
// optstatement - day ifadesi day:=4 olarak tanımlandı
// optexpression - olculecek deger day ifadesi olarak belirlendi
switch day:=4; day {
case 1:
fmt.Println("Pazartesi")
case 2:
fmt.Println("Salı")
case 3:
fmt.Println("Çarşamba")
case 4:
fmt.Println("Perşembe")
case 5:
fmt.Println("Cuma")
case 6:
fmt.Println("Cumartesi")
case 7:
fmt.Println("Pazar")
default:
fmt.Println("Geçerli Bir gün Girmediniz!")
return
}
}
Kodumuzu çalıştırdığımızda aşağıdaki çıktıyı elde edeceğiz:
Perşembe
Yukarıdaki ifadede day isimli değişkene 4 değeri atanmıştır. switch - case ifadeleri ile kontrol edilmek üzere day ifadelerinin inceleneceği belirtilip {} ile case yani durumlar belirtilmiştir. case 4: durumu yani kontrol edilen değer olan day değişkeninin 4'e eşit olduğu durumda haftanın dördüncü günü olan Perşembe değeri ekranda görüntülenmiştir.
Şimdi ikinci bir ifade ile devam edelim :
package main
import (
"fmt"
)
func main(){
var secim int = 3
switch secim {
case 1:
fmt.Println("Cemil")
case 2:
fmt.Println("Ramazan")
case 3:
fmt.Println("Şaban")
case 4:
fmt.Println("Haydar")
default:
fmt.Println("Nuri")
return
}
}
Bu ifademizde secim isimli değişken işlem öncesinde int olarak 3 değeri ile tanımlanmıştır. switch ifademizde secim isimli değişkenin durumlarının değerlendirileceğini belirttikten sonra case ile kontrol ettiğimizde 3 değerinin olduğu koldaki fmt.Println("Şaban) isimli ismi ekranda görüntüleyecektir.
Şaban
Şimdi başka bir ifade ile devam edelim:
package main
import "fmt"
func main() {
var firstName string = "Gökay"
fmt.Printf("Sorgulanan İsim: %s \n", firstName)
switch firstName {
case "Ahmad", "Mohammad":
fmt.Println("Arap İsmi")
case "Gökay", "Alp", "Tolga":
fmt.Println("Türk İsmi")
case "Solomon", "David", "Benjamin":
fmt.Println("Yahudi İsmi")
case "George", "John":
fmt.Println("Amerikan İsmi")
case "Hans", "Jurgen":
fmt.Println("Alman İsmi")
case "Pierre", "Michel":
fmt.Println("Fransız İsmi")
}
}
Yukarıdaki ifadede firstName isimli değişkenimizi Gökay olarak tanımladık. case sorgularımız sırasında ifadeler kümesi olarak değerlendirmeye başladık. İlk case durumumuzda Ahmet veya Mehmet isimlerinden biriyse fmt.Println("Arap İsmi") olarak sonuç döndür dedik. her case ifadesi için birden çok seçenek sorguladık. İkinci case ifademizde verdiğimiz Gökay değeri yakalandığı için bu kolda yer alan fmt.Println("Türk ismi") seçeneği ekranda görüntülendi.
Sorgulanan isim : Gökay
Türk ismi
Tip Switch (Type Switch)
Tip switch anahtarı, türleri karşılaştırmak istediğinizde kullanılır. Bu anahtarda, case ifadesi , switch ifadesinde bulunan tür ile karşılaştırılacak olan türü içerir.
Syntax:
switch optstatement; typeswitchexpression{
case typelist 1: Statement..
case typelist 2: Statement..
...
default: Statement..
}
TYPE SWITCH KURALLARI:
- Opsiyonel ifade, yani optstatement, switch ifadesindeki ile benzerdir.
- Bir
optstatementbirden fazla değer içeriyorsa ve bu değerler virgül(,) ile ayrılırlar.switchdeyimi türünde, case ve default deyimi herhangi bir break deyimi içermez. Ancak, programınız gerekliyse,breakvefallthroughifadesini kullanmanıza izin verilir.typeswitchexpression' dedefaultisteğe bağlıdır.typeswitchexpression, sonucu bir tür olan bir ifadedir.typeswitchexpressioniçinde:=operatörü kullanılarak bir ifade atanırsa, bu değişkenin türü, case yan tümcesinde bulunan türe bağlıdır.caseyan tümcesi iki veya daha fazla tür içeriyorsa, değişkenin türü,typeswitchexpressioniçinde oluşturulduğu türdür.
Example:
package main
import "fmt"
func main() {
// interface yapısında myvalue isimli bir değişken tanımladık
var myvalue interface{}
// myvalue ifadesine ait type görüntüleniyor
switch q:= myvalue.(type) {
case bool:
fmt.Println("boolean type")
case string:
fmt.Println("string type")
case float64:
fmt.Println("float64 type")
case int:
fmt.Println("int type")
default:
fmt.Printf("type: %T", q)
}
}
Yukarıdaki ifadede ilk olarak myvalue isimli interface türünde bir değişken tanımladık.
q:= myvalue.(type)
Yukarıdaki ifade ile myvalue isimli değişkenin type değerini döndürdük. Burada değerimiz int, float64, string
gibi primitive data type ifadelerden biri olmadığından dolayı test edilen durumların hepsini geçerek default isimli ifadeye geldik. Bu ifade mevcut ifadelerden hiçbiriyle eşleşen bir durum yoksa döndürülecek case ifadesini barındırır. Burada da %T ile veri tipini görüntüledik. Sistem bize interface ifademiz için bir değer almadığından dolayı nil ifadesini döndürdü ve çıktımız aşağıdaki şekilde oldu.
type: <nil>[Finished in 634ms]