Какие языки программирования поддерживают постоянные методы? - PullRequest
6 голосов
/ 23 марта 2010

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

Пожалуйста, предоставьте примеры или ссылки в своем ответе.

Ответы [ 7 ]

4 голосов
/ 23 марта 2010

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

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

3 голосов
/ 23 марта 2010

Я считаю, что Фортран (мне кажется, 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 голосов
/ 23 марта 2010

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

2 голосов
/ 23 марта 2010

Поскольку вы пометили это как C ++, я думаю, вы имеете в виду const метод, подобный этому:

class A {
   int e;
public:
   int doSomething() const { 
      // ++ e;    // Compiler error, change data-member in read-only structure
      return e+1; // OK.
   }
};

(Хотя const в C ++ не является истинно-константным из-за mutable членов.)

Тогда я знаю только C ++, D2 и все эти функциональные языки, поддерживающие это.

  • C # не поддерживает const методы , но вы можете сделать всех членов readonly. Вы также можете создать класс / подкласс readonly. В Java нет ключевого слова const, но, как и в C # , вы можете сделать всех членов final.
  • Все функциональные языки по умолчанию используют правильные методы const, потому что функции чистые, но вопрос о том, поддерживают ли они объектно-ориентированное программирование, является другим вопросом.
2 голосов
/ 23 марта 2010

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

2 голосов
/ 23 марта 2010

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

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

0 голосов
/ 23 марта 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...