Sobes.tech
Middle

რა განსხვავებები არსებობს მნიშვნელობის ტიპსა და მითითების ტიპს შორის პროგრამირების ენებში?

sobes.tech AI

პასუხი AI-სგან

ღირებულების ტიპები (მაგალითად, struct, enum, ძირითადი რიცხვითი ტიპები) ინახავენ თავიანთ მნიშვნელობას პირდაპირ. როდესაც ასაინებს ან გადაეცემა ფუნქციას, იქმნება მნიშვნელობის ასლი.
საკავშირო ტიპები (მაგალითად, class, function, closure) ინახავენ ბმულს მეხსიერების ადგილას, სადაც თავად მნიშვნელობა მდებარეობს. როდესაც ასაინებს ან გადაეცემა, იქმნება ბმულის ასლი, რომელიც მიუთითებს იმავე მნიშვნელობაზე მეხსიერებაში.

ძირითადი განსხვავებები:

მახასიათებელი ღირებულების ტიპი საკავშირო ტიპი
შენახვის მეთოდი მნიშვნელობა პირდაპირ ინახება ცვლადში ცვლადი ინახავს ბმულს მნიშვნელობაზე
ასაინებს მნიშვნელობა ასაინებს ბმული ასაინებს (მიმართავს ერთ ობიექტზე)
ცვლილება ცვლილება ასლში არ ზეგავლენას ახდენს ორიგინალზე ბმულის ცვლილება ზეგავლენას ახდენს ორიგინალზე
მეხსიერების ადგილი ჩვეულებრივ, სტეკი (ლოკალური ცვლადებისთვის) ჩვეულებრივ, ჰიპი
მეხსიერების მართვა ავტომატური (გამოსვლისას ლოკაციისგან) ARC (ავტომატური ბმულის მართვა)

სვიფტში მაგალითი:

// ღირებულების ტიპი
struct PointStruct {
    var x: Int
    var y: Int
}

var point1 = PointStruct(x: 1, y: 2)
var point2 = point1 // ასლი იქმნება მნიშვნელობით
point2.x = 10

print(point1.x) // გამოიტანს 1
print(point2.x) // გამოიტანს 10

// საკავშირო ტიპი
class PointClass {
    var x: Int
    var y: Int

    init(x: Int, y: Int) {
        self.x = x
        self.y = y
    }
}

var point3 = PointClass(x: 1, y: 2)
var point4 = point3 // ბმული იქმნება
point4.x = 10

print(point3.x) // გამოიტანს 10 (ობიექტი შეიცვალა ბმულით)
print(point4.x) // გამოიტანს 10