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.