Variadic Functions
variadic functions kavramı bir fonksiyon yazılırken sınırsız sayıda fonksiyon argümanını sisteme dahil edebilen fonksiyon yapıları için kullanılır.
variadic function yazımı sırasında aşağıdaki yapı kullanılır:
// SYNTAX
func funcName(args...argType)returnType {}
Şimdi örneğimizi inceleyelim :
func Sum(eklenecekSayi...int)int{
toplam := 0
for _,sayi :=range eklenecekSayi{
toplam += sayi
}
return toplam
}
Şimdi çalıştırma denemesi için şu şekilde bir yazım yapıyoruz:
package main
import (
"fmt"
)
func Sum(eklenecekSayi...int)int{
toplam := 0
for _,sayi :=range eklenecekSayi{
toplam += sayi
}
return toplam
}
func main() {
sum :=Sum(22, 33, 44, 75)
fmt.Print(sum)
Ekran çıktımız 174% şeklinde olacaktır.Sisteme giriş yapacağımız sayı miktarını belirtmeden rastgele 4 adet sayı ekledik ve bu sayıların çıktılarını ekrana bastırdık.
Variadic Fonksiyonlarda kullanılan argüman tipleri
variadic function yapılarından başta primitive tipler (bool ,float64,int,string) gibi veri tipleri olmak üzere birçok veri tipi kullanılabilmektedir. Kompleks veri tipleri olan interface, array, map gibi veri yapıları da variadic function yapıları ile kullanılabilirler .
interface örneği olarka Println fonksiyon yapısını inceleyelim:
func
func Println(a ...interface{}) (n int, err
error)
Yukarıdaki fonksiyonda a isimli interface tipindeki argümanları Println isimli fonksiyona dahil edileceği belirtilmiştir ve bu fonksiyon (n int, err error) n isimli bir int ya da err isimli bir error döndürecektir. Böylece fonksiyona interface içinde ne değer verilirse verilsin fonksiyon bu değerleri işleme tabi tutup ya int yada error döndürür.
Slice ifadelerinin Variadic Fonksiyon ile Yazdırılması
func SliceVariadic() {
xs := []int{1,2,3}
fmt.Println(Sum(xs...))
}
Bir önceki örneğimize SliceVariadic isimli bir fonksiyon ekledik. Tam kod metnimiz şu şekilde oldu:
package main
import "fmt"
func Sum(eklenecekSayi ...int) int {
toplam := 0
for _, sayi := range eklenecekSayi {
toplam += sayi
}
return toplam
}
func SliceVariadic() {
xs := []int{1, 2, 3}
fmt.Println(Sum(xs...))
}
func main(){
SliceVariadic()
}
Yukarıdaki kodumuzu çalıştırdığımızda ekrana 6 şeklinde bir toplam gelecektir. SliceVariadic fonksiyonunda xs isimli slice ifademizde yer alan 1,2,3 değerleri Sum isimli fonksiyonumuza Sum(xs...) yazımı sayesinde argüman değeri olarak gönderilmiştir. Burada işleme tabi tutulup toplandıktan sonra ekrana çıktı olarak döndürülmüşlerdir.