Costanti pubbliche? AHIAHIAHI

Premessa: ciò che scriverò è una banalità, ma secondo me in tanti non ne sono al corrente o non ci pensano. Di cosa parlo? Di cose del genere:

public const int MyConst = 10;

Il danno potenziale che le costanti pubbliche possono creare alla stabilità delle nostre applicazioni è enorme.

Why? Perché le costanti non sono altro che placeholder risolti in fase di compilazione. Questo vuol dire che, finché non si ricompila, il valore non viene aggiornato.

Implicazioni?

  1. Assembly A che definisce una costante MyConst = 10
  2. Assembly B che referenzia Assembly A e ne utilizza MyConst
  3. Assembly A cambia MyConst a 15
  4. Finché non ricompilo Assembly B, questo continua a vedere MyConst = 10

Ogni tanto mi capita di trovare righe di codice simili a quella in alto, con seguenti bug "strani" e dolori per scovarli. Ecco perché cerco sempre di abituare i junior che lavorano con me alla regola:

Le costanti devono essere sempre private o internal. Se serve esporle allora si utilizzino dei field readonly.

Augh!

Technorati tags: ,

Comments

# re: Costanti pubbliche? AHIAHIAHI
Gravatar Eh si, è lo stesso problema di chi in Visual Basic utilizza metodi con parametri opzionali, ed era lo stesso problema che hai con il C++ ed i parametri opzionali.

Alk.
Left by Gian Maria on 31/01/2008 15.39
# re: Costanti pubbliche? AHIAHIAHI
Gravatar In effetti, messa cosi', non e' mica tanto costante quella costante che si reinizializza a seconda dell'assembly.

Una costante io l'ho sempre vista piu' per definire il pigreco se il compilatore non ce l'ha.

Per tutti gli altri i casi uso la (da tanti considerata bruttissima) variabile globale con la sua inizializzazione nella fase di init del programma e usata solo in lettura altrove.
Anche il rapporto di conversione lira/euro dopo il passaggio all'euro, non ho mai tenuto ne' hardcoded nel codice ne' in una costante ma dentro una variabile.

Non ricordo piu' disse la frase "Le variabili non mutano mai, le costanti si'", ma avevo un prof in universita (e programmavamo ancora perforando schede) che la citava sempre.

Claudia
Left by Claudia on 31/01/2008 16.13
# Re: Costanti pubbliche? AHIAHIAHI
Gravatar Non vorrei sbagliarmi, ma e' lo stesso anche con gli ENUM e quelli cambiano molto di piu delle costanti ;)
Left by Michele Bersani on 31/01/2008 16.51
# re: Costanti pubbliche? AHIAHIAHI
Gravatar http://blogs.ugidotnet.org/PierreGreborio/archive/2007/05/16/78435.aspx :-)
Left by Pierre on 01/02/2008 23.40
# re: Costanti pubbliche? AHIAHIAHI
Gravatar Cavoli Pierre, mi scuso... non ricordavo che ne avessi già parlato te! :(
Left by Marco De Sanctis on 05/02/2008 1.13

Leave Your Comment

Title*
Name*
Email (never displayed)
 (will show your gravatar)
Url
Comment*

Please add 6 and 4 and type the answer here:

Preview Your Comment.