Junior — Middle
Defer quruluşundan istifadə edərək dəyişənə dəyər təyin etmənin nəticəsi nədir, onun dəyəri funksiyanın içində təyin olunursa?
sobes.tech Süni İntellekt
AI-dan cavab
Go dilində, defer açar sözü, ətrafdakı funksiyadan çıxış anına qədər funksiyanın icrasını təxirə salır. defer-ə verilmiş funksiyanın arqumentləri, defer-in elan olunduğu zaman dərhal hesablanır, icra zamanı deyil.
Əgər dəyişən defer vasitəsilə çağırılan funksiyada istifadə olunursa, dəyişənin dəyəri defer-in elan olunduğu zaman olur, arqument kimi ötürülərsə. Əgər dəyişən birbaşa istifadə olunursa (məsələn, bağlama vasitəsilə), icra zamanı onun hazırki dəyəri istifadə olunacaq.
Nümunə:
func nümunə() {
x := 1
defer fmt.Println(x) // x 1 olacaq, çünki arqument dərhal hesablanıb
x = 2
}
// nümunə() çağırıldıqda, çıxış: 1
Əgər bağlama istifadə olunursa:
func nümunə() {
x := 1
defer func() { fmt.Println(x) }() // funksiya çıxışda çağırılacaq, x 2 olacaq
x = 2
}
// nümunə() çağırıldıqda, çıxış: 2
Beləliklə, defer içində dəyişənə təyin olunan nəticə, dəyişənin necə istifadə olunduğundan asılıdır — funksiyanın arqumenti kimi və ya bağlama vasitəsilə.