CodeBlanks Logo Icon CodeBlanks

Komut satırı menüsü

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=3

Bu 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

main.go
package main

import "fmt"

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
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

Soru
switch islem {
case "+":
    return a + b, nil
____:
    return 0, fmt.Errorf("bilinmeyen işlem")
}
Cevap
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

Başlangıç bölümündeki tüm dersler