2010-03-23 16 views
6

¿Qué lenguajes de programación distintos de C++ admiten el concepto de un método de clase constante? Es decir, ¿qué idiomas le permiten al programador restringir un método de tal manera que se garantice que no cambiará el estado de un objeto al cual se aplica el método?¿Qué lenguajes de programación admiten métodos constantes?

Sírvanse proporcionar ejemplos o referencias en su respuesta.

+6

El voto para cerrar esta me parece fuera de lugar - es claramente una cuestión real para el que una respuesta correcta es posible (y puede haber más de una respuesta correcta). Sin embargo, el "Por favor proporcione ejemplos o referencias ..." suena como una tarea. –

+0

Esta es una pregunta real y no una tarea. Se originó a partir de una discusión con un amigo programador C++ sobre un problema que encontró con métodos constantes. Durante esa discusión, me di cuenta de que ni Java ni Scala admiten este concepto y que no muchos lenguajes orientados a objetos que conozco. Entonces, me preguntaba, ¿qué idiomas admiten este concepto? –

+2

Una de las mejores preguntas que he visto hoy. ¿Por qué los votos cercanos? –

Respuesta

4

Haskell, ya que es purely functional.

En realidad, cada valor/método es constante en Haskell aunque el estado mutable/IO se puede modelar a través de una construcción matemática llamada mónada.

+0

No hay una respuesta correcta para mi pregunta, pero he decidido aceptar esta respuesta como "correcta" porque es cierta y hasta ahora ha recibido la mayoría de los votos. –

3

Todos los idiomas puramente funcionales son todos const de manera predeterminada porque los idiomas puramente funcionales no tienen ningún estado para cambiar.

+1

... si con "permitir", quiere decir "fuerza" :) –

+0

¿Qué quiere decir? No usé la palabra "permitir". –

+0

No, pero la pregunta sí. –

2

De acuerdo con this Wikipedia entry, esta característica no está disponible en muchos otros lenguajes orientados a objetos como Java y C# o en C++/CLI de Microsoft.

lenguajes puramente funcionales como Haskell, Curry,   http://en.wikipedia.org/wiki/Ωmega_interpreter">Ωmega hacer apoyo * * esta función mandato.

+1

"Mandato" es un punto importante! –

2

ConstJava y Javari son dos variaciones de Java que admite el concepto de un método constante. Sin embargo, Java Java ha obsoleto a ConstJava.

0

Quizás podría escribir un atributo personalizado en .Net. Sin embargo, los objetos que pase pueden heredar de la misma clase es decir, EntityBase para que pueda garantizar manualmente que el estado sea el mismo.

2

Puesto que usted etiquetado esto como C++, creo que quiere decir const método como este:

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

(. Aunque const C++ 's no es un verdadero-const debido a las mutable miembros)

Entonces

I Solo estoy al tanto de C++, D2 y todos los lenguajes funcionales que lo soportan.

  • C# doesn't support const methods pero puede hacer todos los miembros readonly. También puede crear una clase/subclase de contenedor readonly. Java no tiene la palabra clave const, pero como C# you can make all members final.
  • idiomas Todo funcionales utilizan métodos correctos const por defecto porque las funciones son puros, pero si apoyan la programación orientada a objetos es otra cuestión.
+0

Sí, me refería en particular a los métodos 'const' de C++. –

+0

Aunque la pérdida de constness es un comportamiento indefinido si el objeto es realmente const, p. una declaración de variable const de alcance global. –

3
+2

+1 me ganaste por un minuto más o menos. Ahora sentémonos y veamos la discusión sobre si Fortran es OO. Debe ser divertido. –

+0

"Puro" o "sin efecto secundario" son dos formas interesantes de referirse a los métodos 'const'. –

+1

Aunque tenía en mente los lenguajes orientados a objetos cuando escribí la pregunta, evité especificar realmente orientado a objetos para que las personas enumeraran muchas clases diferentes de lenguajes de programación. –

Cuestiones relacionadas