Generics
Bu sayfada Go geliştiricilerin "Go'da niye generics yok...Go'ya generics nezaman eklenecek?" diye diye Go dilinin yaratıcılarına adeta hayatı zindan ettiği Generic'leri inceleyeceğiz. Generics Go'nun 1.18 versiyonu ile dile dahil edildi.
Generics olmadan da uzun süre boyunca Go yazmak mümkündü tabi ki. Peki bu kadar istenilen bu yapının bize ne gibi faydaları bulunuyor bir bakalım.
Ufak bir örnek ile başlayalım.
package main
import "fmt"
func main() {
var sayı1 int = 5
fmt.Println(arttır(sayı1))
}
func arttır(sayı int) int {
return sayı + 1
}
Yukarıdaki kodlarda basit bir ekleme işlemi yapan bir fonksiyon var. Bu fonksiyonumuz
int
değer alıyor ve int
değer döndürüyor.Bu fonksiyonumuza
int
tipinde sayı1
değişkenimizi verdik ve ekrana bastırdık. Neyse zaten kod basit kendini açıklıyor ama nedense ben hep bu dökümanın başından beri herşeyi açıklıyorum. Bazı arkadaşlarımız bu yüzden bana kızıyor olabilir ☺
Eğer
sayı1
değişkenimiz int
değil de float64
tipinde olsaydı, arttır fonksiyonumuzu değiştirmemiz gerekirdi. Eğer birden fazla sayı tipi ile işlem yapacağımız durumlar olsaydı, her biri için farklı fonksiyonlar eklememiz gerekecekti.Generic'ler ile nasıl yapabileceğimizi görelim.
package main
import "fmt"
func main() {
var sayı1 int = 5
var sayı2 float64 = 5.3
fmt.Println(arttır(sayı1))
fmt.Println(arttır(sayı2))
}
func arttır[n int | float64](sayı n) n {
return sayı + 1
}
main
bloğunun içinde baktığımızda farklı değişken tipindeki 2 sayıyı aynıyı fonksiyona parametre olarak verdik.Bunu nasıl yaptığımız büyük bir sır değil tabiki. Biraz daha aşağıya baktığımızda kendini belli ediyor.
arttır
fonksiyonunun parametre parantezlerinden önce köşeli parantez açarak, bu kısma n
isminde int
veya float64
tipinde değer alabilen bir tip oluşturduk. Fonksiyonumuzun parametre parantezinde n
tipi ile belirlediğimiz tipte değerler alabilir hale geldik.Yukarıdaki örneğimizde oluşturduğumuz generic fonksiyonda parametre tiplerinde kısıtlama yaptık.