CodeBlanks Logo Icon CodeBlanks

Toplam hesaplama

range ile sepetin toplam tutarını hesaplarsın.

Toplam hesaplama

Sepet toplamı, her ürünün ara toplamının toplamıdır. range ile ürünleri gez ve biriktir:

func (s Sepet) Toplam() float64 {
    t := 0.0
    for _, u := range s.Urunler {
        t += u.AraToplam()
    }
    return t
}

Burada değer alıcı yeterlidir çünkü sepet yalnızca okunur.

İndirim kuralı

İş kuralları da yöntem olarak eklenir. Örneğin 100 TL üzeri alışverişte %10 indirim:

func (s Sepet) Odenecek() float64 {
    t := s.Toplam()
    if t > 100 {
        return t * 0.9
    }
    return t
}

Kuralı ayrı bir yöntemde tutmak, kural değiştiğinde yalnızca tek yeri düzenlemeni sağlar.

Uygulama Toplam ve indirim

Urun (ve AraToplam), Sepet, Toplam ve Odenecek yöntemlerini yaz. Sepette Kalem 12.5 × 5 ve Çanta 80 × 1 olsun; toplamı ve ödenecek tutarı tek satırda yazdır.

Başlangıç kodu

main.go
package main

import "fmt"

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import "fmt"

type Urun struct {
    Ad    string
    Fiyat float64
    Adet  int
}

func (u Urun) AraToplam() float64 { return u.Fiyat * float64(u.Adet) }

type Sepet struct{ Urunler []Urun }

func (s Sepet) Toplam() float64 {
    t := 0.0
    for _, u := range s.Urunler {
        t += u.AraToplam()
    }
    return t
}

func (s Sepet) Odenecek() float64 {
    t := s.Toplam()
    if t > 100 {
        return t * 0.9
    }
    return t
}

func main() {
    s := Sepet{Urunler: []Urun{{"Kalem", 12.5, 5}, {"Çanta", 80, 1}}}
    fmt.Println(s.Toplam(), s.Odenecek())
}

Beklenen çıktı

142.5 128.25

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 <code>t := 0.0</code> yerine <code>t := 0</code> yazılırsa ne olur?

  • Sonuç yuvarlanır
  • t nil olur
  • t int olur ve t += float64 derleme hatası verir Doğru cevap
  • Fark etmez

Açıklama: := türü değerden çıkarır; 0 int, 0.0 float64 verir. Go int ile float64'ü karıştırmaz.

2 Biriktir

Soru
for _, u := range s.Urunler {
    t ____ u.AraToplam()
}
Cevap
for _, u := range s.Urunler {
    t += u.AraToplam()
}

Açıklama: t += x, t'ye x ekleyip sonucu yine t'ye yazar.

3 Sepet ve sonuç

Kavram Anlamı
Kalem 12.5 × 5 62.5
Defter 20 × 1 20
Toplam 82.5
Toplam > 100 %10 indirim

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