Sarebbe utile avere un modificatore di sola lettura per le variabili a livello di metodo?

0

In C # puoi usare il modificatore di sola lettura per un campo a livello di classe per indicare (a comiger e ad altri DEVS) che una volta impostato non può essere modificato.

Mi piacerebbe molto la possibilità di contrassegnare una variabile dichiarata in un metodo come readonly, quindi una volta impostata non può essere modificata.

C'è un modo per farlo? Se non fosse una buona caratteristica di C # o indica che il mio codice è mal costruito se lo sto volendo?

Esempio:

public void DoSomthingGreat(string username) 
{
    readonly bool isAdmin = GetTheIsAdminStateforUser(username);

    // do some stuff
    // now ask if the user is admin before doing something else,
    // knowing that the flag shouldn't have been changed by another DEV!
    if (isAdmin)
    {
        // Do some other stuff that only admins can do
    }
}
    
posta Dib 22.05.2015 - 18:32
fonte

1 risposta

1

Java ha questo sotto forma di modificatore "finale" che può essere utilizzato anche su variabili locali. È decisamente molto meno utile dei campi finali / readonly di classe, ma se sia utile è una questione di dibattito e stile / preferenza personale.

Da un lato, può essere usato per difendersi da assegnamenti accidentali / errori di battitura, specialmente in metodi più complicati (che dovrebbero essere discutibilmente scomposti / semplificati comunque), dall'altro porta un disordine visivo al codice sorgente. Sarebbe molto meglio se le variabili fossero di sola lettura per impostazione predefinita e dovessi usare il modificatore per abilitarne la mutevolezza.

Un buon uso è aggiungere le variabili finali alle variabili locali nel codice complesso / spaghetti come primo passo per ragionare, comprendere e refactoring del codice errato - non è molto invasivo e fornisce ancora alcuni invarianti utili sul codice. Nel codice ben progettato composto da metodi brevi, i benefici sono minori perché dovresti essere in grado di vedere cosa sta succedendo a prima vista ...

Da quello che ho visto, la maggior parte del codice Java non utilizza il finale per le variabili locali. Alcuni grandi progetti (ad esempio Apache Http Client) lo usano però ...

    
risposta data 24.05.2015 - 16:22
fonte

Leggi altre domande sui tag