Sobes.tech
Junior

Swift proqramlaşdırma dilində dəyər növləri və istinad növləri arasındakı fərqlər nələrdir?

sobes.tech Süni İntellekt

AI-dan cavab

Dəyər Növləri (Value Types) və İstinad Növləri (Reference Types) məlumatların saxlanması və ötürülməsi üsulu ilə fərqlənir.

Dəyər Növləri:

  • Təyin etmə müstəqil məlumat nüsxəsi yaradır.
  • Məlumatlar birbaşa elan yerində və ya yığımda (yerli dəyişənlər üçün) saxlanılır.
  • Struktur, enum və tuple-lər dəyər növləridir.
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 0, y: 0)
var p2 = p1 // p1-in nüsxəsi yaradılır
p2.x = 10

print(p1.x) // 0
print(p2.x) // 10 - p1 dəyişməyib

İstinad Növləri:

  • Təyin etmə eyni məlumatlara yeni istinad yaradır.
  • Məlumatlar yığımda saxlanılır və onlara istinad elan yerində və ya yığımda yerləşir.
  • Siniflər istinad növləridir.
class Rect {
    var width: Int
    var height: Int

    init(width: Int, height: Int) {
        self.width = width
        self.height = height
    }
}

var r1 = Rect(width: 10, height: 20)
var r2 = r1 // r2 artıq eyni obyektə istinad edir
r2.width = 30

print(r1.width) // 30 - r1 dəyişdi, çünki r2 eyni obyektə istinad edir
print(r2.width) // 30

Əsas fərqlər cədvəldə:

Xüsusiyyət Dəyər Növləri (Value Types) İstinad Növləri (Reference Types)
Təyin etmə Məlumatları kopyalayır İstinadı kopyalayır
Məlumatların saxlanması Elan yerində / Yığımda Yığımda (elan yerində istinad)
İplərin təhlükəsizliyi Standart olaraq ip üçün təhlükəsiz Sinxronizasiya tələb edir
Növlər Struct, Enum, Tuple, Array, Dict Class, Function, Closure

Növlər arasında seçim vəzifədən asılıdır: sadə və müstəqil məlumatların təqdimatı üçün Dəyər Növləri üstünlük təşkil edir, ümumi dəyişən və irsiyyət ilə işləyən obyektlər üçün - İstinad Növləri (siniflər). Dəyər Növlərinin istifadəsi performansı yaxşılaşdırmağa kömək edə bilər, çünki yığım üzərində yükü azaldır və yaddaş idarəsini sadələşdirir.