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-ის დატვირთვის შემცირებით და მეხსიერების მართვის გამარტივებით.