Anonim fonksiyonlar
- Go kursu
- Başlangıç
- Ders 33/90
- 4 dk
İsimsiz fonksiyonlar ve closure kavramını öğrenirsin.
Anonim fonksiyonlar
Adı olmayan fonksiyonlar bir değişkene atanabilir, argüman olarak verilebilir ya da hemen çağrılabilir:
kare := func(n int) int { return n * n }
fmt.Println(kare(4)) // 16
func() {
fmt.Println("hemen çalıştı")
}()Go'da fonksiyonlar birinci sınıf değerlerdir: türleri vardır (func(int) int) ve diğer değerler gibi taşınırlar.
Kapanış ile sayaç
Bir fonksiyon, kendi yerel değişkenini yakalayan başka bir fonksiyon döndürebilir. Her çağrıda yakalanan değişken güncellenir:
func sayacYap() func() int {
n := 0
return func() int {
n++
return n
}
}
say := sayacYap()
fmt.Println(say(), say(), say()) // 1 2 3Her sayacYap() çağrısı kendi bağımsız n'ini oluşturur.
Uygulama Kapanışlı sayaç
Yukarıdaki sayacYap fonksiyonunu yaz. İki ayrı sayaç oluştur (a ve b); a'yı iki kez, b'yi bir kez çağırıp son değerleri fmt.Println(a(), b()) ile yazdır.
Başlangıç kodu
package main
import "fmt"
func main() {
// buraya yaz
}Örnek çözüm
package main
import "fmt"
func sayacYap() func() int {
n := 0
return func() int {
n++
return n
}
}
func main() {
a := sayacYap()
b := sayacYap()
a()
a()
b()
fmt.Println(a(), b())
}Beklenen çıktı
3 2
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Kapanış (closure) nedir?
- Paket dışından görünmeyen fonksiyon
- Dışındaki değişkenleri yakalayıp kullanan anonim fonksiyon Doğru cevap
- Programı kapatan fonksiyon
- Parametresiz fonksiyon
Açıklama: Kapanış, tanımlandığı yerdeki değişkenlere referansla erişir; fonksiyon döndükten sonra da o değişkenleri canlı tutar.
2 Fonksiyon türü
func sayacYap() ____ int {
n := 0
return func() int { n++; return n }
}
func sayacYap() func() int {
n := 0
return func() int { n++; return n }
}
Açıklama: Dönüş türü func() int, parametresiz ve int döndüren bir fonksiyondur.
3 Kod ve anlamı
| Kavram | Anlamı |
|---|---|
func(n int) int {...} |
Fonksiyon değeri |
func() {...}() |
Hemen çağrılır |
n++ (yakalanan) |
Kapanış durumu |
func() int |
Fonksiyon türü |