Sobes.tech
Junior — Middle

Defer yapısı kullanılarak bir değişkene değer atamanın sonucu nedir, değeri bir fonksiyon içinde belirlenmişse?

sobes.tech yapay zeka

AI'dan gelen yanıt

Go dilinde, defer anahtar kelimesi, bir fonksiyonun yürütülmesini, çevresindeki fonksiyon sona erene kadar erteler. defer'e geçirilen fonksiyonun argümanları, defer ifadesinin bildirildiği anda hemen hesaplanır, yürütülme sırasında değil.

Bir değişken, defer aracılığıyla çağrılan fonksiyon içinde kullanılırsa, değişkenin değeri, defer'in bildirildiği anda, argüman olarak geçirilmişse, o zaman geçerli olur. Eğer değişken doğrudan kullanılırsa (örneğin, bir kapanış aracılığıyla), o zaman yürütme anındaki mevcut değeri kullanılır.

Örnek:

func örnek() {
    x := 1
    defer fmt.Println(x) // x 1 olacak, çünkü argüman hemen hesaplandı
    x = 2
}

// örnek() çağrıldığında, çıktı: 1

Kapanış kullanılırsa:

func örnek() {
    x := 1
    defer func() { fmt.Println(x) }() // fonksiyon çıkışta çağrılır, x 2 olur
    x = 2
}

// örnek() çağrıldığında, çıktı: 2

Bu nedenle, defer içindeki değişkene atama sonucu, değişkenin nasıl kullanıldığına bağlıdır — fonksiyon argümanı olarak mı yoksa kapanış aracılığıyla mı.