immutable object (tsz. immutable objects)
Egy objektum akkor immutábilis, ha az összes mezője konstans vagy csak olvasható, és nincs mód a belső állapot megváltoztatására.
struct Point {
const int x;
const int y;
Point(int x, int y) : x(x), y(y) {}
};
x
és y
mezők const
, tehát nem módosíthatók a konstruktor után.
point = (3, 4) # tuple
tuple
típusa immutábilis – nem lehet elemeit módosítani.s = "hello"
s = "H" # ❌ TypeError: 'str' object does not support item assignment
str
(karakterlánc) is immutábilis típus.
final class Point {
private final int x;
private final int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() { return x; }
public int getY() { return y; }
}
final
, és nincs setter – ez egy klasszikus immutable osztály.
Előny | Leírás |
---|---|
Biztonságos párhuzamosítás | Többszálú környezetben nem okoz adatversenyt. |
Egyszerű hibakeresés | Állapot nem változik, kevesebb mellékhatás. |
Referenciák megosztása biztonságos | Nem okoz gondot, ha többen ugyanarra az objektumra hivatkoznak. |
Hátrány | Leírás |
---|---|
Több memóriahasználat | Minden “változtatás” új objektumot eredményez. |
Több példány | Módosítás helyett új példány kell. |
Nehézkes mutáció igény esetén | Ha mégis kellene változtatni, workaround kell (pl. másolat, builder minta). |
Mivel nem lehet módosítani, ezért új példányt kell létrehozni:
point = (3, 4)
new_point = (point, point + 1) # új tuple, nem a régit módosítjuk
Vagy C++-ban:
Point p(3, 4);
// nincs mód p.x = 5-re, csak új Point példány készíthető
const
mindenholclass Config {
const int port;
public:
Config(int p) : port(p) {}
int getPort() const { return port; }
};
const
adattagokconst
metódusok)
Tulajdonság | Érték |
---|---|
Definíció | Objektum, amely nem módosítható |
Példák | std::string (C++ valójában mutálható), tuple (Python), String (Java)
|
Cél | Stabilitás, biztonság, kiszámíthatóság |
Használat | Többszálúság, értékobjektumok, funkcionális kód |