Sobes.tech
Intern

Ինչ են տվյալների տեսակները և որոնք գոյություն ունեն?

sobes.tech AI

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

Տվյալների տեսակները սահմանում են հնարավոր արժեքների հավաքածուն և գործողությունները, որոնք կարելի է կատարել դրանց վրա: Swift-ում դրանք բաժանվում են Value Types և Reference Types:

Value Types (արժեքային տեսակներ):

  • Արժեքները պատճենվում են նշանակման կամ փոխանցման ժամանակ:
  • Ամեն փոփոխական կամ կոնստանտ պահում է սեփական անկախ տվյալների պատճենը:
  • Մեկ պատճենի փոփոխությունները չեն ազդում մյուսների վրա:

Օրինակներ Value Types:

  • Կառուցվածքներ (struct)
  • Էնումներ (enum)
  • Թյուպլեր (tuple)
  • Հիմնական տեսակներ՝ Int, Double, Bool, String, զանգվածներ (Array), բառարաններ (Dictionary), հավաքածուներ (Set):
// Օրինակ Value Type: struct
struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 1, y: 2)
var p2 = p1 // p2 ստանում է p1-ի պատճենը
p2.x = 10 // p2 փոփոխությունը չի ազդում p1-ի վրա

print("p1: \(p1)") // p1: Point(x: 1, y: 2)
print("p2: \(p2)") // p2: Point(x: 10, y: 2)

Reference Types (հղման տեսակներ):

  • Արժեքները չեն պատճենվում, երբ նշանակվում կամ փոխանցվում են:
  • Հղում է փոխանցվում նույն տվյալների օրինակին հիշողության մեջ:
  • Բազմաթիվ փոփոխականներ կամ կոնստանտներ կարող են հղում ունենալ նույն օրինակին:
  • Փոփոխությունները մեկ հղումով տեսանելի են մյուս բոլոր հղումներով:

Օրինակներ Reference Types:

  • Կլասներ (class)
  • Ֆունկցիաներ (func)
  • Կապեր (closure)
// Օրինակ Reference Type: class
class Circle {
    var radius: Double

    init(radius: Double) {
        self.radius = radius
    }
}

var c1 = Circle(radius: 5.0)
var c2 = c1 // c2 հղում է նույն օրինակին, ինչ c1
c2.radius = 10.0 // փոփոխությունը ազդում է c1-ի վրա

print("c1 radius: \(c1.radius)") // c1 radius: 10.0
print("c2 radius: \(c2.radius)") // c2 radius: 10.0

Տեղեկատու աղյուսակ հիմնական տեսակների մասին:

Կատեգորիա Տիպ(եր) Value/Reference Type Նկարագրություն
Թվային ամբողջական Int, UInt, Int8, UInt8 և այլն Value Բազմազան չափերի ամբողջ թվեր, դրական և բացասական նշանով
Ֆլոտային թվեր Float, Double Value Թվեր տասնորդական մասով
Բուլյան Bool Value Լոգիկական արժեքներ (true կամ false)
Տողեր String Value Տառերի հաջորդականություն
Կոլեկցիաներ Array, Dictionary, Set Value Կարգավորված կամ անկարգավորված հավաքածուներ նույնատիպ տարրերով
Սխտորներ struct Value Անհատական օգտագործողի ձևավորված տեսակներ, պահում են կապված արժեքներ
Էնումներ enum Value Համընդհանուր տեսակ՝ կապված արժեքների խմբի համար
Թյուպլեր (value1, value2, ...) Value Մի քանի արժեքների խմբավորում մեկ կազմային տեսակում
Կլասներ class Reference Անհատական օգտագործողի ձևավորված տեսակներ, որոնք աջակցում են ժառանգությանը և հղման վարքագծին
Ֆունկցիաներ () -> Void, (Int) -> String և այլն Reference Կատարող կոդի բլոկներ
Կապեր { (parameters) -> return type in code } Reference Անհատական կոդի բլոկներ, որոնք կարող են փոխանցվել և օգտագործվել
Օպցիոնալներ Type? (սինտակսիկ շաքար Optional<Type> համար) Value Ներկայացնում է կամ Type արժեքը, կամ նրա բացակայությունը (nil)

Ընտրությունը Value և Reference տեսակների միջև կախված է խնդիրից: Value տեսակները նախընտրելի են փոքր տվյալների և բեղմնավորության ապահովման համար, Reference տեսակները՝ բարդ օբյեկտների համար, որոնք պահանջում են ընդհանուր վիճակ և ժառանգություն։