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
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) // 10Yalnızca son parametresi değişken olabilir:
func log(prefix string, values ...any) { ... } // ok
// func wrong(...int, suffix string) {} // ERROREBir dilim yayılıyor
Zaten bir diliminiz varsa, onu değişken bir işleve iletebilirsiniz.
...:
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:
// signature (semplificata):
// func Println(a ...any) (n int, err error)
fmt.Println("ciao", 42, true)
args := []any{"a", "b", "c"}
fmt.Println(args...)Deneyin
Tüm bağımsız değişkenlerin toplamını döndüren sum(nums ...int) int'yi tanımlayın.
İpucu göster
'nums' fonksiyonunun içinde '[]int' türü bulunur.
3 denemeden sonra çözüm mevcut
Dilim sayılarını yayılmış 'nums...' ile ileterek mevcut toplam işlevini çağırın.
İpucu göster
`...` dilim adından sonra gelir.
3 denemeden sonra çözüm mevcut
'func f(args ...string)' içinde 'args' türü nedir?
func f(args ...string) {
_ = args
}Özet
...TLAST parametresi olarak = değişken işlev; içinde[]Tvar.- 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.