Какие языки программирования кроме C++ поддерживают понятие постоянного метода класса? Таким образом, какие языки позволяют программисту ограничивать метод таким способом, которым он, как гарантируют, не изменит состояние объекта, к которому применяется метод?
Обеспечьте примеры или ссылки в Вашем ответе.
Haskell, поскольку он чисто функциональный.
На самом деле, в Haskell каждое значение/метод является константным, несмотря на то, что изменяемое состояние/IO может быть смоделировано с помощью математической конструкции, называемой монадой.
Я считаю, что в Фортране (кажется, 95 или выше) есть то, что вы ищете. Достаточно случайно называется «чистыми подпрограммами».
http://www.soks.org/view/Fortran95ForFortran77Programmers#pure_routines
Поскольку вы отметили это как C ++, я думаю, вы имеете в виду метод const
, подобный этому:
class A {
int e;
public:
int doSomething() const {
// ++ e; // Compiler error, change data-member in read-only structure
return e+1; // OK.
}
};
(Хотя константа C ++ не является true-const из-за изменяемых
членов.)
Тогда я знаю только C ++, D2 и все эти функциональные языки, поддерживающие это.
const
, но вы можете сделать все члены только для чтения
. Вы также можете создать класс / подкласс оболочки только для чтения
. В Java нет ключевого слова const, но, как и в C # , вы можете сделать все члены final
.ConstJava и Javari - это два варианта Java, которые поддерживают концепцию постоянного метода. Тем не менее, ConstJava устарел Javari.
Возможно, вы могли бы написать собственный атрибут в .Net. Однако все объекты, которые вы передаете, могут быть унаследованы от одного и того же класса, то есть EntityBase, поэтому вы можете вручную убедиться, что состояние одинаковое.
Все чисто функциональные языки являются const
по умолчанию, потому что в чисто функциональных языках нет состояния, которое можно изменить.
Согласно этой записи в Википедии , эта функция недоступна во многих других объектно-ориентированных языках, таких как Java и C #, или в Microsoft C ++ / CLI.
Чисто функциональные языки, такие как Haskell , Curry , http://en.wikipedia.org/wiki/Ωmega_interpreter">Ωmega do поддержка * мандат * эта функция.