Spesso, quando sto inizializzando qualcosa devo usare una variabile temporanea, ad esempio:
file_str = "path/to/file"
file_file = open(file)
o
regexp_parts = ['foo', 'bar']
regexp = new RegExp( regexp_parts.join('|') )
Tuttavia, mi piace ridurre l'ambito delle mie variabili al più piccolo ambito possibile in modo che ci siano meno punti in cui possono essere (male) utilizzati. Ad esempio, provo a usare for(var i ...)
in C ++, quindi la variabile di loop è confinata al corpo del ciclo.
In questi casi di inizializzazione, se sto usando un linguaggio dinamico, sono spesso tentato di riutilizzare la stessa variabile per impedire che il valore iniziale (e ora inutile) venga utilizzato da ultimo in la funzione.
file = "path/to/file"
file = open(file)
regexp = ['...', '...']
regexp = new RegExp( regexp.join('|') )
L'idea è che riducendo il numero di variabili in ambito I riduca le possibilità di utilizzarle impropriamente . Tuttavia questo a volte rende i nomi delle variabili un po 'strani, come nel primo esempio, dove "file" si riferisce a un "nomefile".
Penso che forse sarebbe un problema se potessi usare gli ambiti non annidati
begin scope1
filename = ...
begin scope2
file = open(filename)
end scope1
//use file here
//can't use filename on accident
end scope2
ma non riesco a pensare a nessun linguaggio di programmazione che supporti questo.
Quali regole del pollice dovrei usare in questa situazione?
- Quando è meglio riutilizzare la variabile?
- Quando è meglio creare una variabile extra?
- In quali altri modi risolviamo questo problema di ambito?