Константная ссылка на объект. Корректный термин на английском.

Рейтинг: 1Ответов: 2Опубликовано: 06.04.2011

У меня есть особый вид переменных, значение которым можно присвоить лишь однажды. При присваивании объекта, присвается ссылка на него.

Но при этом состояние объекта можно менять. Constant object подойдёт или нет?

Ответы

▲ 2Принят

В теории языков программирования это называется name binding, иными словами - сопоставление конкретного объекта с именем, в отличие от переменной (variable), которая является слотом в памяти, куда можно поместить значение объекта (если это, скажем, число), или ссылку на него.

Если же вы просто решили создать некий класс-контейнер, который можно проинициализировать некоторым значением, но нельзя присвоить другое, и решаете как его назвать, то можно воспользоваться термином "ячейка" (cell), как это сделано в языке Scala:

scala> val container = new Cell(256)
container: Cell[Int] = Cell(256)

scala> container.elem
res1: Int = 256

scala> container.elem = 257
<console>:6: error: reassignment to val
       container.elem = 257
                      ^

Из примера видно, что контейнер Cell содержит некоторый элемент (elem), но изменить его нельзя. В то же время, если при создании в Cell "положить", к примеру, массив, то элементы этого массива законно можно изменять. Можно также использовать еще более говорящее название ImmutableCell или PersistentCell.

В конце-концов, можно, не мудрствуя лукаво, просто использовать канонический термин value, как противоположность variable. Авторы Scala так и делают (обратите внимание на ключевые слова: val (value) и var (variable)):

scala> val x = 10
x: Int = 10

scala> var y = 10
y: Int = 10

scala> y = 20
y: Int = 20

scala> x = 20
<console>:6: error: reassignment to val
       x = 20
         ^
▲ 2

Я бы назвал immutable reference.

По-моему, очень подходящий термин.

По крайней мере, это распространённая терминология. Довольно естественно и общепринято, что когда говорят о const (например, ссылке или списке), то состояние внутренних объектов менять нельзя, а если коллекция immutable, то из этого не следует, что содержащиеся в ней объекты тоже immutable.

P.S. Ой, внимательнее прочитал ответ, который самый длинный. Там тоже в конце предлагают immutable… По-моему, отличный и обоснованный вариант.