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.