Gambas-it

Gambas3 => Programmazione => Topic aperto da: Franco_da_vc - 02 Aprile 2017, 13:36:33

Titolo: [Risolto] Comportamento variabili locali
Inserito da: Franco_da_vc - 02 Aprile 2017, 13:36:33
Rieccomi amici  :D

Una domanda forse un po' banale, se io descrivo una variabile locale interna ad una funzione (o anche procedura, non penso che cambi molto) ed ho già descritto una variabile globale con lo stesso nome, queste due collidono o vivono di vita propria?

Vi parrà una domanda un po' sciocca, ma nel precedente linguaggio ciò non succedeva, se in gambas non fosse così dovrei variare il nome di molte variabili locali.

Grazie
 :2birre:
Titolo: Re:Comportamento variabili locali
Inserito da: vuott - 02 Aprile 2017, 15:30:59
La seguente prova pratica:

Codice: [Seleziona]
Private variabile As Integer


Public Sub Main()

  Dim variabile As Integer
 
  variabile = 12345
  Print variabile
 
  Prova()

End


Private Procedure Prova()
   
   Print variabile
 
End

rileva che la variabile locale sopprime quella globale.
Titolo: Re:Comportamento variabili locali
Inserito da: Franco_da_vc - 02 Aprile 2017, 20:34:32
Grazie!

 ;D ;D
Titolo: Re:[Risolto] Comportamento variabili locali
Inserito da: vuott - 02 Aprile 2017, 22:28:03
...ma quest'altra prova:

Codice: [Seleziona]
Private variabile As Integer = 99999


Public Sub Main()

  Dim variabile As Integer
 
  variabile = 12345
  Print variabile
 
  Prova()

End


Private Procedure Prova()
   
   Print variabile
 
End

ci dice che, se la variabile globale è istanziata nella sua riga di dichiarazione, il suo valore persiste al di fuori delle routine non contenenti variabili locali aventi medesimo nome identificatore.
Titolo: Re:[Risolto] Comportamento variabili locali
Inserito da: Franco_da_vc - 03 Aprile 2017, 21:57:02
Quindi una variabile descritta in una classe persiste nelle sub ove non ne viene istanziata una locale con lo stesso nome in caso avverso la variabile visibile è quella locale.

Grazie vuott.
Titolo: Re:[Risolto] Comportamento variabili locali
Inserito da: vuott - 03 Aprile 2017, 23:12:14
... in caso avverso la variabile visibile è quella locale.

Sì, le prove affermano che il "locale" prevale sul "globale", e su ogni altro ambito di persistività - previsto in Gambas - di un valore allocato in memoria.

Va ricordato che questa norma generale non vale solo in ordine alle variabili che rappresentano un Oggetto di una Classe, ma anche a tutte le altre variabili.