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-ի բեռը և պարզեցնելով հիշողության կառավարումը։