Sobes.tech
Middle

Niyə bu strukturda öz növündə sahə elan etmək olmaz?

sobes.tech Süni İntellekt

AI-dan cavab

Swift-də strukturlar dəyər tipləridir (value types). Struktur nümunəsi yaradıldıqda, onun bütün sahələri üçün yaddaş ayrılır. Əgər struktur öz növündən olan sahəni ehtiva edə bilsəydi, onun ölçüsü sonsuz olardı, çünki içində eyni strukturun başqa bir nümunəsi üçün yer olmalı idi və bu, öz növbəsində başqa bir nümunə üçün yer tələb edərdi və s. Bu, döngəvi asılılığa səbəb olar və strukturun son ölçüsünü müəyyən etmək mümkün olmazdı.

Strukturdan fərqli olaraq, siniflər (classes) referans tipləridir (reference types). Sinifin sahəsi həmin sinifin nümunəsinə istinad edə bilər. Sahə yalnız sinif nümunəsinin yaddaş ünvanını saxladığı üçün, sinifin ölçüsünü müəyyən edərkən, tam nümunənin ölçüsünü bilmək lazım deyil. İstinadlar sabit ölçüyə malikdir.

Strukturla bağlı problemi göstərən nümunə:

// Bu struktur tərtib edilə bilməz
// struct Node {
//     var value: Int
//     var next: Node? // Xəta! Struktur 'Node' tipində sahə saxlaya bilməz
// }

Bənzər problemləri həll etmək üçün, strukturda dolayı istinadlar istifadə oluna bilər, məsələn, protokollar və ya bağlamalar vasitəsilə, və ya siniflərdən istifadə edilə bilər. Tipik nümunə, əlaqəli siyahılar, adətən siniflər vasitəsilə həyata keçirilir.