Newsgroup: it.comp.lang.delphi
Titolo: variabili locali e globali

Se io dichiaro una variabile nel programma principale questa viene
riconosciuta sia all'interno del programma principale che all'interno delle
procedure e funzioni (si tratta di una variabile globale), se dichiaro
invece una variabile all'interno di una procedura, questa viene vista solo
da quella procedura e basta (variabile globale).
Quello che non capisco č perchč fare questa distinzione; se le variabili
globali vengono viste sempre, perchč non dichiarare tutte le variabili usate
come globali. In altre parole perchč non si dichiarano tutte le variabili
all'inizio e si taglia la testa al toro e si preferisce invece usare sia
variabili locali che globali?
C'č sicuramente un motivo, ma io non so quale; qualcuno me lo potrebbe
spiegare?
Grazie

 spiegare?
Ci sono motivi pratici e logici; innanzitutto, considerando che una 
variabile è identificata da un nome (identificatore), non sarebbe 
possibile dichiarare più variabili con lo stesso nome sebbene queste 
abbiano una valenza puramente "locale", cioè nel blocco di istruzioni 
che ne fanno uso.
In secondo luogo, le variabili locali sono sfruttate nel processo di 
incapsulamento che nasconde l'implementazione di una procedura (o 
funzione) dall'esterno, in modo che venga vista come una scatola chiusa; 
siccome la variabile locale viene vista solo dalla routine in cui è 
dichiarata, nessuna routine o elemento esterno può modificarne il valore 
"rompendone" la consistenza e influenzandone il comportamento (vi sono 
già molti rischi quando si utilizzano variabili globali all'interno di 
procedure e funzioni).
Viene allocata memoria per le variabili locali solo quando la procedura 
o funzione in cui sono dichiarate viene richiamata; le variabili globali 
sono allocate al momento del caricamento della unit di cui fanno parte e 
persistono in memoria fino alla chiusura dell'applicazione.
Credo vi siano tante altre motivazioni...queste sono le prime, banali 
che mi sono venute in mente, forse nemmeno spiegate nel migliore dei 
modi. Magari qualcun altro potrà aggiungere informazioni, dettagli e 
correzioni...
Ciao! :-)
-- 
Marco «Alka» Breveglieri
  (marco [@] abls [.] it)
  ABLS Team S.n.c. - Software & Web
  42019 Scandiano (Reggio Emilia)
 
http://www.abls.it


Grazie

 "rompendone" la consistenza e influenzandone il comportamento
Aggiungo che è assodato che sia bene dichiarare le variabili nel punto più
vicino al loro utilizzo.  Purtroppo Delphi non lascia molta libertà,
mentre altri linguaggi come il C o ancora meglio il C++ consentono di
implementare comportamenti più sicuri.  Ad esempio, il C non vieta di
dichiarare una variabili all'interno di un compound-statement, quindi io
potrei scrivere:
int i, j;
for (i=0; i<9; i++) 
{
    for (j=0; j<9; j++)
    {
        ...  
    }
}
sia i che j sono visibili sia all'interno, che all'esterno dei due cicli,
ma potrei anche scrivere:
int i;
for (i=0; i<9; i++)
{
    int j;
    for (j=0; j<19; j++)
    {
        ...
    }
}
In questo modo j è visibile solo all'interno del primo ciclo, e così via.
Il nuovo standard sia del C che del C++ consente di dichiarare variabili
ovunque nel codice e addirittura (ma solo il C++) di scrivere qualcosa del
tipo:
for (int i=0; i<9; i++)
{
    for (int j=0; j<9; j++)
    { 
    }
}
in questo modo si restringe al massimo la possibilità di usare le stesse
variabili per scopi diversi.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it