Sobes.tech
Junior

Ի՞նչ տարբերություններ կան արժեքային և հղման տիպերի միջև Swift ծրագրավորման լեզվում։

sobes.tech AI

Պատասխան AI-ից

Տիպերի արժեքներ (Value Types) և հղումային տիպերը (Reference Types) տարբերվում են տվյալների պահպանում և փոխանցման եղանակով:

Արժեքային տիպեր՝

  • Հավասարեցումը ստեղծում է տվյալների անկախ պատճեն:
  • Տվյալները պահվում են ուղղակիորեն հայտարարության վայրում կամ ստեկում (տեղական փոփոխականների համար):
  • Կառուցվածքներ, ցուցակներ և տիպեր են արժեքային տիպեր:
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

Ընտրությունը տիպերի միջև կախված է խնդիրից. պարզ անկախ տվյալների ներկայացման համար նախընտրելի են Value Types, իսկ օբյեկտների հետ ընդհանուր փոփոխվող սուբյեկտների և ժառանգության համար՝ Reference Types (կլասներ): Value Types-ի օգտագործումը կարող է բարելավել կատարողականությունը՝ նվազեցնելով heap-ի բեռը և պարզեցնելով հիշողության կառավարումը։