Sobes.tech
Middle

Koje su razlike između tipa vrednosti i referentnog tipa u programskim jezicima?

sobes.tech АИ

Одговор од АИ

Tipovi vrednosti (na primer, struct, enum, osnovni numerički tipovi) čuvaju svoju vrednost direktno. Pri dodeljivanju ili prosleđivanju funkciji, kreira se kopija vrednosti.
Tipovi referenci (na primer, class, function, closure) čuvaju referencu na mesto u memoriji gde se nalazi sama vrednost. Pri dodeljivanju ili prosleđivanju, kreira se kopija reference koja ukazuje na istu vrednost u memoriji.

Glavne razlike:

Karakteristika Tip vrednosti Tip reference
Način skladištenja Vrednost se direktno skladišti u promenljivoj Promenljiva čuva referencu na vrednost
Dodeljivanje Kopira se vrednost Kopira se referenca (ukazuje na isti objekat)
Izmena Izmena kopije ne utiče na original Izmena putem reference utiče na original
Mesto u memoriji Obično na steku (za lokalne promenljive) Obično na heap-u
Upravljanje memorijom Automatski (pri izlasku iz opsega) ARC (Automatski brojilac referenci)

Primer u Swift:

// tip vrednosti
struct PointStruct {
    var x: Int
    var y: Int
}

var point1 = PointStruct(x: 1, y: 2)
var point2 = point1 // kopira vrednost
point2.x = 10

print(point1.x) // ispisuje 1
print(point2.x) // ispisuje 10

// tip reference
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 // kopira referencu
point4.x = 10

print(point3.x) // ispisuje 10 (objekat je promenjen putem reference)
print(point4.x) // ispisuje 10