Sobes.tech
Junior

Фарқиятҳои байни намудҳои арзиш ва намудҳои истинод дар забони барномасозии Swift чист?

sobes.tech AI

Ҷавоб аз AI

Типҳои арзиш (Value Types) ва навъҳои ишора (Reference Types) дар бораи нигоҳдории ва интиқоли маълумот фарқ мекунанд.

Типҳои арзиш:

  • Таъинсозӣ нусхаи мустақилро аз маълумотҳо месозад.
  • Маълумотҳо мустақиман дар ҷойи эълон ё дар стек (барои тағйирёбандаҳои маҳаллӣ) нигоҳ дошта мешаванд.
  • Сохторҳо, enumeration ва tuple-ҳо навъҳои арзиш мебошанд.
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 0, y: 0)
var p2 = p1 // Нусхаи p1 эҷод мешавад
p2.x = 10

print(p1.x) // 0
print(p2.x) // 10 - p1 тағйир наёфтааст

Навъҳои ишора:

  • Таъинсозӣ ишора ба маълумоти ҳамонро месозад.
  • Маълумотҳо дар heap нигоҳ дошта мешаванд, ва ишора ба онҳо дар ҷойи эълон ё дар стек аст.
  • Классҳо навъҳои ишора мебошанд.
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 ҳоло ишора ба ҳамон объект аст, ки r1
r2.width = 30

print(r1.width) // 30 - r1 тағйир ёфт, чунки r2 ба ҳамон объект ишора мекунад
print(r2.width) // 30

Таблицавӣ, фарқиятҳои асосӣ:

Хусусият Навъҳои арзиш (Value Types) Навъҳои ишора (Reference Types)
Таъинсозӣ Маълумотро нусхабардорӣ мекунад Ишораро нусхабардорӣ мекунад
Ҳамгироии маълумот Дар ҷойи эълон / Стек Дар heap (ишора дар ҷойи эълон)
Бехатарии симиҳо Ба таври пешфарз бехатар барои симиҳо Талаб мекунад ҳамоҳангсозӣ барои симиҳо
Навъҳо Struct, Enum, Tuple, Array, Dict Class, Function, Closure

Интихоб байни навъҳо вобаста ба вазифа аст: барои намоиши маълумоти содда ва мустақил, навъҳои арзишӣ беҳтар аст, барои объектҳо бо сутуни умумӣ ва мерос - навъҳои ишора (кластаро). Истифодаи навъҳои арзишӣ метавонад иҷроишро беҳтар кунад, бо кам кардани бор дар heap ва содда кардани идоракунии хотира.