Какие языки программирования поддерживают постоянные методы?

Какие языки программирования кроме C++ поддерживают понятие постоянного метода класса? Таким образом, какие языки позволяют программисту ограничивать метод таким способом, которым он, как гарантируют, не изменит состояние объекта, к которому применяется метод?

Обеспечьте примеры или ссылки в Вашем ответе.

6
задан Derek Mahar 23 March 2010 в 17:39
поделиться

7 ответов

Haskell, поскольку он чисто функциональный.

На самом деле, в Haskell каждое значение/метод является константным, несмотря на то, что изменяемое состояние/IO может быть смоделировано с помощью математической конструкции, называемой монадой.

4
ответ дан 8 December 2019 в 14:42
поделиться

Я считаю, что в Фортране (кажется, 95 или выше) есть то, что вы ищете. Достаточно случайно называется «чистыми подпрограммами».

http://www.soks.org/view/Fortran95ForFortran77Programmers#pure_routines

http://publib.boulder.ibm.com/infocenter/comphelp/v7v91/index.jsp?topic=/com.ibm. xlf91a.doc / xlflr / pure.htm

3
ответ дан 8 December 2019 в 14:42
поделиться

Поскольку вы отметили это как 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 и все эти функциональные языки, поддерживающие это.

  • C # не поддерживает методы const , но вы можете сделать все члены только для чтения . Вы также можете создать класс / подкласс оболочки только для чтения . В Java нет ключевого слова const, но, как и в C # , вы можете сделать все члены final .
  • Все функциональные языки по умолчанию используют константные правильные методы, потому что функции являются чистыми, но поддерживают ли они объектно-ориентированное программирование - это другой вопрос.
2
ответ дан 8 December 2019 в 14:42
поделиться

ConstJava и Javari - это два варианта Java, которые поддерживают концепцию постоянного метода. Тем не менее, ConstJava устарел Javari.

2
ответ дан 8 December 2019 в 14:42
поделиться

Возможно, вы могли бы написать собственный атрибут в .Net. Однако все объекты, которые вы передаете, могут быть унаследованы от одного и того же класса, то есть EntityBase, поэтому вы можете вручную убедиться, что состояние одинаковое.

0
ответ дан 8 December 2019 в 14:42
поделиться

Все чисто функциональные языки являются const по умолчанию, потому что в чисто функциональных языках нет состояния, которое можно изменить.

3
ответ дан 8 December 2019 в 14:42
поделиться

Согласно этой записи в Википедии , эта функция недоступна во многих других объектно-ориентированных языках, таких как Java и C #, или в Microsoft C ++ / CLI.

Чисто функциональные языки, такие как Haskell , Curry , http://en.wikipedia.org/wiki/Ωmega_interpreter">Ωmega do поддержка * мандат * эта функция.

2
ответ дан 8 December 2019 в 14:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: