Il problema NON E' l'efficienza del codice, MA la ""riutilizzabilita'"" della funzione e la possibilita' di usarla in contesti
diversi quali, ad esempio, il multithreading che, nel caso delle ""funzioni"", e' particolarmente semplice.
Ad esempio,
- che cosa succede se usi la funzione 2,3,10,100,1000 volte? Che cosa succede al contenuto della
variabile globale?
- che cosa succede se usa la funzione NELLO STESSO MOMENTO 2 o piu' volte? Ti ritrovi che le DUE (o piu') COPIE della funzione modificheranno NELLO STESSO MOMENTO la variabile globale, plausibimente con valori DIVERSI.
In questo caso hai DIVERSI problemi:
- NON C'E' MODO di assicurarti che una funzione venga eseguita PRIMA o DOPO 'altra.
- senza opportuni accorgimenti, la variabile globale potrebbe essere modificata in modo ""strano"": una parte dei byte da una funzione ed un'altra parte dall'altra funzione.
Per il problema relativo a come NON usare variabili globali, non esiste un'UNICO metodo.
Tutto dipende da perche' ti dovrebbe servire la variabile.
Se la variabile globale contiene un valore COSTANTE, allora il suo utilizzo e' perfettamente lecito.
Se la variabile globale viene solo LETTA dalla funzione, allora il suo valore puo' essere passato come parametro
Se la variabile globale viene LETTA e MODIFICATA, allora il suo valore dovrebbe essere passato come parametro,
MA il suo nuovo valore dovrebbe essere ritornato dalla funzione.
Un modo alternativo e' passare alla funzione una struttura dati (struct o class) contenente il valore globale
e che la funzione puo', a sua volta, modificare.
In pratica, il ""concetto fondamentale"" da seguire e' il seguente:
1) la funzione deve ricevere, nei parametri, TUTTO QUELLO che gli serve per fare i suoi calcoli
2) la funzione deve utilizzare SOLO il contenuto di parametri O informazioni locali
3) la funzione deve ritornare SOLO un risultato e NON MODIFICARE i parametri. Le informazioni locali, essendo PRIVATE alla funzione, E NON GLOBALI, possono essere modificate a piacimento
Nessuno ti impedisce di inventare altre soluzioni