Komut satırı menüsü
- Go kursu
- Başlangıç
- Ders 28/90
- 6 dk
Switch ile bir menü ve döngü eklersin.
İşlem seçimi: switch
Kullanıcının girdiği simgeye göre doğru fonksiyonu seçmek için switch idealdir:
func hesapla(a float64, islem string, b float64) (float64, error) {
switch islem {
case "+":
return topla(a, b), nil
case "-":
return cikar(a, b), nil
case "*":
return carp(a, b), nil
case "/":
return bol(a, b)
default:
return 0, fmt.Errorf("bilinmeyen işlem: %s", islem)
}
}Menü döngüsü
Gerçek bir uygulamada kullanıcıdan satır satır girdi okunur ve "çık" yazana kadar döngü sürer. Girdiyi parçalara ayırmak için fmt.Sscan kullanılabilir:
var a, b float64
var islem string
n, _ := fmt.Sscan("12 * 3", &a, &islem, &b)
// n == 3, a=12, islem="*", b=3Bu derste girdiyi sabit bir listeden okuyarak menüyü deneyeceksin.
Uygulama Hesap makinesi
hesapla fonksiyonunu yalnızca + ve * için yaz, diğer simgelerde fmt.Errorf("bilinmeyen işlem: %s", islem) döndürsün. []string{"12 * 3", "2 ^ 3"} girdilerini fmt.Sscan ile ayrıştırıp her birinin sonucunu ya da hatasını yazdır.
Başlangıç kodu
package main
import "fmt"
func main() {
// buraya yaz
}Örnek çözüm
package main
import "fmt"
func hesapla(a float64, islem string, b float64) (float64, error) {
switch islem {
case "+":
return a + b, nil
case "*":
return a * b, nil
default:
return 0, fmt.Errorf("bilinmeyen işlem: %s", islem)
}
}
func main() {
for _, line := range []string{"12 * 3", "2 ^ 3"} {
var a, b float64
var islem string
fmt.Sscan(line, &a, &islem, &b)
sonuc, err := hesapla(a, islem, b)
if err != nil {
fmt.Println(err)
continue
}
fmt.Println(sonuc)
}
}Beklenen çıktı
36 bilinmeyen işlem: ^
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Go'da <code>case</code> sonunda <code>break</code> yazmak gerekir mi?
- Yalnızca son case'te
- Yalnızca default'ta
- Hayır; eşleşen case bitince switch otomatik biter Doğru cevap
- Evet, her zaman
Açıklama: Go'da case'ler alta düşmez; bir sonrakine geçmek için açıkça fallthrough yazılır.
2 Varsayılan dal
switch islem {
case "+":
return a + b, nil
____:
return 0, fmt.Errorf("bilinmeyen işlem")
}
switch islem {
case "+":
return a + b, nil
default:
return 0, fmt.Errorf("bilinmeyen işlem")
}
Açıklama: default hiçbir case eşleşmediğinde çalışır.
3 Girdi ve sonuç
| Kavram | Anlamı |
|---|---|
"12 * 3" |
36 |
"9 / 2" |
4.5 |
"1 / 0" |
sıfıra bölünemez |
"2 ^ 3" |
bilinmeyen işlem |