Ciao, sto cercando di capire come limitare al meglio il mio rischio per quanto riguarda l'ambito locale nelle funzioni. Nella mia comprensione, le mie opzioni per limitare il potenziale di inquinare l'ambito Here dall'interno di un'esecuzione di Function sono dichiarare le mie variabili locali o utilizzare Default Local. Tuttavia, ognuno di questi presenta alcuni problemi:
Locale predefinito:
- I valori di riferimento possono dipendere dal contesto, poiché i nomi che non sono stati definiti localmente fanno fallback a Here quindi possibilmente (se Names Default To Here è off) Global then current table. Come notato nei documenti, ciò può significare che il comportamento è meno prevedibile in quanto i valori dipendono dal contesto.
Dichiarazione esplicita:
- I valori di riferimento possono dipendere dal contesto, poiché i nomi utilizzano ancora questo comportamento di fallback fino a quando non vengono dichiarati se non dichiarati nei nomi locali
- Le assegnazioni possono fuoriuscire accidentalmente nell'ambito Here. Cioè, se un nome che dovrebbe essere locale viene omesso dalle dichiarazioni del nome locale, inquinerà l'ambito Here circostante
- Generalmente questo inquinamento di portata esterna è difficile da rintracciare.
- Ad esempio, se chiami una funzione in un For in cui usi "i" come iteratore e quella funzione ha anche un For che usa i e non riesce a dichiararlo come locale, questo influenzerà il tuo ciclo For esterno. Certo, questo è un ovvio errore del programmatore, ma è facile da realizzare ed è difficile eseguire il debug.
Nella mia mente, l'opzione ideale sarebbe in grado di dichiarare qualcosa come "Strict Local", che tratterebbe sempre i nomi non qualificati (sia durante l'assegnazione di valori che di riferimento) poiché gli ambiti locali e circostanti sarebbero accessibili solo con nomi qualificati. Ciò mi consentirebbe di non rischiare di inquinare gli ambiti circostanti oltre a costringermi a dichiarare quando dipendo da tali ambiti, limitando così l'inquinamento locale dagli ambiti circostanti.