Ana içeriğe geç
Modül 3 · Ders 3 ders 5Kurstaki 13/50~10 min
Modül dersleri (3/5)

Değişken işlevler

Değişken işlevler rastgele sayıda bağımsız değişkeni kabul eder. aynı tip. Bunları, son türün önüne ... koyarak bildirirsiniz. parametre. Fonksiyonun içindeki parametre bir dilim'dir.

beyan

Go
func sum(nums ...int) int {
    tot := 0
    for _, n := range nums {
        tot += n
    }
    return tot
}

sum()              // 0   (nums = []int{})
sum(1)             // 1
sum(1, 2, 3, 4)    // 10

Yalnızca son parametresi değişken olabilir:

Go
func log(prefix string, values ...any) { ... }   // ok
// func wrong(...int, suffix string) {}            // ERRORE

Bir dilim yayılıyor

Zaten bir diliminiz varsa, onu değişken bir işleve iletebilirsiniz. ...:

Go
nums := []int{1, 2, 3}
sum(nums...)         // 6 — espande lo slice nei singoli argomenti

"..." dilimden sonra gelir. Yayılma olmadan bir tür elde edersiniz hata: işlevin bir dizi beklediği yerde bir []int iletiyor olacaksınız int.

nums yeni bir kapsayıcı değil, bir dilimdir

nums fonksiyonunun içinde []int türü bulunur. Tüm standart dilim operasyonların çalışması: len(nums), nums[0], range, vb.

Klasik kullanım örneği: fmt.Println

fmt'nin Print* işlevlerinin tümü değişkendir:

Go
// signature (semplificata):
// func Println(a ...any) (n int, err error)

fmt.Println("ciao", 42, true)
args := []any{"a", "b", "c"}
fmt.Println(args...)

Deneyin

Egzersiz#go.m3.l3.e1
Denemeler: 0Yükleniyor…

Tüm bağımsız değişkenlerin toplamını döndüren sum(nums ...int) int'yi tanımlayın.

Düzenleyici yükleniyor…
İpucu göster

'nums' fonksiyonunun içinde '[]int' türü bulunur.

3 denemeden sonra çözüm mevcut

Egzersiz#go.m3.l3.e2
Denemeler: 0Yükleniyor…

Dilim sayılarını yayılmış 'nums...' ile ileterek mevcut toplam işlevini çağırın.

Düzenleyici yükleniyor…
İpucu göster

`...` dilim adından sonra gelir.

3 denemeden sonra çözüm mevcut

Quiz#go.m3.l3.e3
Hazır

'func f(args ...string)' içinde 'args' türü nedir?

Go
func f(args ...string) {
    _ = args
}
Cevap seçenekleri

Özet

  • ...T LAST parametresi olarak = değişken işlev; içinde []T var.
  • Tek değerlerle çağrılır: derleyici bunları bir dilim halinde toplar.
  • Mevcut bir dilimle çağrılır: slice... (yayılma, dilimi yeniden kullanır).
  • Tüm fmt.Print* işlevleri değişkendir.
  • Yalnızca son parametre değişken olabilir.