CodeBlanks Logo Icon CodeBlanks

Anonim fonksiyonlar

İ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 3

Her 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

main.go
package main

import "fmt"

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
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ü

Soru
func sayacYap() ____ int {
    n := 0
    return func() int { n++; return n }
}
Cevap
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ü

Başlangıç bölümündeki tüm dersler