Introduzione
Molti linguaggi di programmazione "C-like" utilizzano istruzioni composte (blocchi di codice specificati con "{" e "}") per definire un ambito di variabili.
Ecco un semplice esempio.
for (int i = 0; i < 100; ++i) {
int value = function(i); // Here 'value' is local to this block
printf("function(%d) == %d\n", i, value);
}
Questo è utile perché limita l'ambito di value
a dove viene utilizzato. È difficile per i programmatori utilizzare value
in modi a cui non sono destinati perché possono accedervi solo dal suo ambito.
Sono quasi tutti a conoscenza di questo e sono d'accordo sul fatto che è buona norma dichiarare le variabili nel blocco in cui vengono utilizzate per limitare il loro ambito.
Ma anche se è una convenzione stabilita per dichiarare le variabili nel loro ambito più piccolo possibile, non è molto comune usare un'istruzione composta nuda (cioè un'istruzione composta che non è connessa a if
, for
, while
istruzione).
Scambio dei valori di due variabili
I programmatori scrivono spesso il codice in questo modo:
int x = ???
int y = ???
// Swap 'x' and 'y'
int tmp = x;
x = y;
y = tmp;
Non sarebbe meglio scrivere il codice in questo modo:
int x = ???
int y = ???
// Swap 'x' and 'y'
{
int tmp = x;
x = y;
y = tmp;
}
Sembra abbastanza brutto, ma penso che questo sia un buon modo per rafforzare la località variabile e rendere il codice più sicuro da usare.
Questo non si applica solo ai provvisori
Vedo spesso modelli simili in cui una variabile viene utilizzata una sola volta in una funzione
Object function(ParameterType arg) {
Object obj = new Object(obj);
File file = File.open("output.txt", "w+");
file.write(obj.toString());
// 'obj' is used more here but 'file' is never used again.
...
}
Perché non lo scriviamo così?
RET_TYPE function(PARAM_TYPE arg) {
Object obj = new Object(obj);
{
File file = File.open("output.txt", "w+");
file.write(obj.toString());
}
// 'obj' is used more here but 'file' is never used again.
...
}
Riepilogo della domanda
È difficile trovare buoni esempi. Sono sicuro che ci sono migliori modi per scrivere il codice nei miei esempi, ma non è quello di cui tratta questa domanda.
La mia domanda è perché non usiamo dichiarazioni composte "nude" più per limitare l'ambito delle variabili.
Cosa pensi dell'uso di una dichiarazione composta come questa
{
int tmp = x;
x = y;
y = z;
}
per limitare l'ambito di tmp
?
È una buona pratica? È una cattiva pratica? Spiega i tuoi pensieri.