2010-03-23 1 views
6

Quali linguaggi di programmazione diversi dal C++ supportano il concetto di un metodo di classe costante? Cioè, quali lingue consentono al programmatore di vincolare un metodo in modo tale da garantire che non cambi lo stato di un oggetto a cui è applicato il metodo?Quali linguaggi di programmazione supportano i metodi costanti?

Fornire esempi o riferimenti nella risposta.

+6

La votazione per chiudere questa mi sembra fuori luogo - è chiaramente una vera e propria domanda per la quale è possibile una risposta corretta (e non ci possono essere più di una risposta corretta). Il "Si prega di fornire esempi o riferimenti ..." suona come un compito a casa però. –

+0

Questa è una vera domanda e non un compito a casa. È nato da una discussione con un amico programmatore C++ riguardante un problema che ha incontrato con metodi costanti. Durante quella discussione, mi sono reso conto che né Java né Scala supportano questo concetto e che non molti linguaggi orientati agli oggetti che conosco fanno. Quindi, mi chiedevo, quali lingue supportano questo concetto? –

+2

Una delle migliori domande che ho visto oggi. Perché i voti ravvicinati? –

risposta

4

Haskell, dal momento che è purely functional.

In realtà, ogni valore/metodo è costante in Haskell anche se lo stato mutevole/IO può essere modellato tramite un costrutto matematico chiamato monade.

+0

Non c'è una risposta corretta alla mia domanda, ma ho deciso di accettare questa risposta come "corretta" perché è vera e ha finora ricevuto il maggior numero di voti. –

3

Tutte le lingue puramente funzionali sono tutte const per impostazione predefinita in quanto le lingue puramente funzionali non hanno uno stato da modificare.

+1

... se per "consentire", intendi "forza" :) –

+0

Cosa intendi? Non ho usato la parola "consentire". –

+0

No, ma la domanda è stata fatta. –

2

Secondo this Wikipedia entry, questa funzione non è disponibile in molti altri linguaggi orientati agli oggetti come Java e C# o in C++/CLI di Microsoft.

linguaggi puramente funzionali come Haskell, Curry,   http://en.wikipedia.org/wiki/Ωmega_interpreter">Ωmega fare supporto * * mandato questa funzione.

+1

"Mandato" è un punto importante! –

2

ConstJava e Javari sono due varianti di Java supporta il concetto di un metodo costante: ConstJava è stato tuttavia obsoleto da Javari,

0

Forse potresti scrivere un attributo personalizzato in .Net Gli oggetti che passi, però, possono tutti ereditare dalla stessa classe cioè EntityBase in modo da poter garantire manualmente lo stato è lo stesso.

2

Dal momento che hai contrassegnato questo come C++, Credo che si intende const metodo come questo:

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

(. Anche se const C++ s 'non è un vero-const a causa delle mutable membri)

Poi

I Sono a conoscenza solo di C++, D2 e di tutti quei linguaggi funzionali che supportano questo.

  • C# doesn't support const methods ma è possibile effettuare tutti i membri readonly. Puoi anche creare una classe/sottoclasse wrapper readonly. Java non ha la parola chiave const, ma come C# you can make all members final.
  • Tutti i linguaggi funzionali utilizzano i metodi const per default perché le funzioni sono pure, ma se supportano la programmazione orientata agli oggetti è un'altra domanda.
+0

Sì, mi riferivo in particolare ai metodi 'const' di C++. –

+0

Sebbene la costanza del cast sia un comportamento indefinito se l'oggetto è effettivamente const, ad es. una dichiarazione di variabili const per scope globali. –

3

Credo che Fortran (almeno 95 anni credo) abbia quello che stai cercando. Per coincidenza abbastanza chiamato "subroutine pura".

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

+2

+1 mi hai battuto per un minuto o così. Ora sediamoci e guardiamo la discussione sul fatto che Fortran sia OO. Dovrebbe essere divertente. –

+0

"Pure" o "side-effect free" sono due modi interessanti per fare riferimento ai metodi 'const'. –

+1

Sebbene avessi in mente i linguaggi orientati agli oggetti quando ho scritto la domanda, ho evitato di specificare in modo specifico orientato agli oggetti in modo che la gente elencasse molte classi differenti di linguaggi di programmazione. –