Последнее время очень хочется "сказать компилятору", что объект неизменяемый.
Что-то вроде:
type TPoint = class
public
X : Integer;
Y : Integer;
costructor Create(aX, aY: Integer);
end; // TPoint
...
Var [Immutable] p : TPoint;
...
p := TPoint.Create(10, 20);
p.X := 30; // - тут компилятор ругается
Ну и естественно методы хочется метить const/noconst.
Я в своих скриптах такое уже почти сделал.
Почти - потому, что компилятор пока не все случаи отлавливает. Но это специфика реализации компилятора скриптов. Слишком уж он гибок. И местами на duckTyping заточен.
Но хотя бы в runTime - ругается. Если в compileTime не распознал.
Что-то вроде:
type TPoint = class
public
X : Integer;
Y : Integer;
costructor Create(aX, aY: Integer);
end; // TPoint
...
Var [Immutable] p : TPoint;
...
p := TPoint.Create(10, 20);
p.X := 30; // - тут компилятор ругается
Ну и естественно методы хочется метить const/noconst.
Я в своих скриптах такое уже почти сделал.
Почти - потому, что компилятор пока не все случаи отлавливает. Но это специфика реализации компилятора скриптов. Слишком уж он гибок. И местами на duckTyping заточен.
Но хотя бы в runTime - ругается. Если в compileTime не распознал.
Видите смысл в Immutable?
ОтветитьУдалитьЕсли есть желание, взгляните на Immutable.js, а также здесь после сентенции "Неизменяемые данные являются ключевым аспектом архитектуры Redux". Думаю, материал статьи, который я нахожу превосходным, может показаться полезным и Вам, особенно в части immutable и функционального подхода в императивных языках.