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