Menu
Coddy logo textTech

Hata Kavramı

Coddy'nin GO Journey'sinin Temeller bölümünün bir parçası — ders 102 / 109.

Go'da, hatalar bir şeylerin ters gittiğini belirten değerlerdir. Go, hataları istisnalar kullanmak yerine açıkça ele alır.

Sayıları bölerken hata oluşturabilecek bir fonksiyon oluşturalım:

func divide(a, b float64) (float64, error) {
    if b == 0 {
        return 0, errors.New("cannot divide by zero")
    }
    return a / b, nil
}

Bu fonksiyon iki değer döndürür: bölme işleminin sonucu ve potansiyel bir hata. Eğer bölen sıfır ise, bölme işlemini denemek yerine bir hata mesajı döndürürüz.

Şimdi, fonksiyonumuzu kullanalım ve olası hataları ele alalım:

result, err := divide(10, 0)
if err != nil {
    fmt.Println("Error:", err)
} else {
    fmt.Println("Result:", result)
}

Bu kodu çalıştırdıktan sonra, sıfıra bölmeye çalıştığımız için ekranda bir hata mesajı göreceğiz:

Error: cannot divide by zero

Bu, Go'nun hata işleme desenini gösterir: bir hata oluşup oluşmadığını kontrol edin (err != nil) ve ardından uygun işlemi yapın. Eğer hata oluşmadıysa, sonucu güvenle kullanabiliriz.

challenge icon

Görev

Kolay

Bu meydan okumada, Go'da hatalarla çalışma pratiği yapacaksınız. İki sayıyı bölen ve sıfıra bölme denendiğinde bir hata döndüren bir fonksiyon oluşturacaksınız.

Göreviniz şunları yapmaktır:

  1. İki tam sayı alan ve bunların bölümünü ve bir hatayı döndüren divide fonksiyonunu tamamlayın.
  2. Eğer bölen sıfır ise, 0 ve "division by zero" mesajını içeren bir hata döndürün.
  3. Bölme işlemi geçerliyse, sonucu ve hata için nil döndürün.
  4. main fonksiyonunda, sağlanan değerlerle divide fonksiyonunu çağırın ve tüm hataları uygun şekilde ele alın.

Bu alıştırma, Go fonksiyonlarının yaygın olarak nasıl bir sonuç ve bir hata döndürdüğünü ve bu hataların nasıl kontrol edilip ele alınacağını gösterir.

Kopya kağıdı

Go'da, hatalar (errors) bir şeylerin ters gittiğini belirten değerlerdir. Go, hataları istisnalar (exceptions) kullanmak yerine açıkça (explicitly) ele alır.

Hata verme olasılığı olan fonksiyonlar iki değer döndürür: sonuç ve potansiyel bir hata:

func divide(a, b float64) (float64, error) {
    if b == 0 {
        return 0, errors.New("cannot divide by zero")
    }
    return a / b, nil
}

Hataları işlemek için, hatanın nil olup olmadığını kontrol edin:

result, err := divide(10, 0)
if err != nil {
    fmt.Println("Error:", err)
} else {
    fmt.Println("Result:", result)
}

Yeni hata mesajları oluşturmak için errors.New() kullanın ve herhangi bir hata oluşmadığında nil döndürün.

Kendin dene

package main
import (
    "errors"
    "fmt"
)
// divide, a'yı b'ye böler ve sonucu döndürür
// Eğer b 0 ise, bir hata döndürür
func divide(a, b int) (int, error) {
    // TODO: divide fonksiyonunu uygula
    // Eğer b 0 ise, 0 ve "division by zero" mesajını içeren bir hata döndürür
    // Aksi takdirde, a/b sonucunu ve hata için nil döndürür

}
func main() {
    // İlk test durumu
    a, b := 10, 2
    result, err := divide(a, b)
    if err != nil {
        fmt.Printf("Error: %s\n", err)
    } else {
        fmt.Printf("Result: %d\n", result)
    }

    // İkinci test durumu
    a, b = 8, 0
    result, err = divide(a, b)
    if err != nil {
        fmt.Printf("Error: %s\n", err)
    } else {
        fmt.Printf("Result: %d\n", result)
    }
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Temeller bölümündeki tüm dersler