Come evitare variabili globali

di il
2 risposte

Come evitare variabili globali

Salve a tutti ragazzi,

so che l'utilizzo delle variabili globali non è la scelta migliore dal punto di vista di efficienza di codice quando bisogna richiamare diversi dati all'interno di diverse funzioni.
Qualcuno potrebbe consigliarmi una strada migliore per utilizzare delle variabili in diverse funzioni senza ricorrere al global.

grazie mille.

2 Risposte

  • Re: Come evitare variabili globali

    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
  • Re: Come evitare variabili globali

    Sei stato chiarissimo grazie mille!
Devi accedere o registrarti per scrivere nel forum
2 risposte