Sobes.tech
Middle

Go'da kapanış (closure) nedir ve nasıl çalışır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Go'da kapanış, çevresel bağlamındaki değişkenlerin değerlerini "hatırlayan" bir fonksiyondur, hatta bu çevre artık var olmasa bile.

Çalışma prensibi şu şekildedir:

  1. Bir kapanış oluşturulduğunda (örneğin, başka bir fonksiyon içinde), tanımlandığı kapsamdan referanslar yakalar.
  2. Bu yakalanan değişkenler, kapanış var olduğu sürece canlı kalır, hatta onları tanımlayan fonksiyon zaten sona ermiş olsa bile.
  3. Her kapanış çağrısında, bu yakalanan değişkenlere erişebilir ve onları değiştirebilir.

Örnek:

package main

import "fmt"

func makeCounter() func() int {
	count := 0 // Dış çevreden değişken
	return func() int { // Bu bir kapanıştır
		count++ // `count`'a erişir ve onu değiştirir
		return count
	}
}

func main() {
	counter1 := makeCounter()
	fmt.Println(counter1()) // 1 yazdırır
	fmt.Println(counter1()) // 2 yazdırır

	counter2 := makeCounter() // Kendi `count`'u olan yeni bir kapanış oluşturur
	fmt.Println(counter2()) // 1 yazdırır
}

Bu örnekte, makeCounter fonksiyonu bir fonksiyon (kapanış) döndürür. Bu kapanış, count değişkenini "yakalar". Döndürülen fonksiyon her çağrıldığında, bu kapanışın ait olduğu count değeri artırılır.