Autore Topic: [Risolto] Comportamento variabili locali  (Letto 402 volte)

Offline Franco_da_vc

  • Grande Gambero
  • ***
  • Post: 215
  • Non è mai troppo tardi!
    • Mostra profilo
[Risolto] Comportamento variabili locali
« il: 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:
« Ultima modifica: 02 Aprile 2017, 20:34:58 da Franco_da_vc »
Bye by Afo

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Comportamento variabili locali
« Risposta #1 il: 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.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Franco_da_vc

  • Grande Gambero
  • ***
  • Post: 215
  • Non è mai troppo tardi!
    • Mostra profilo
Re:Comportamento variabili locali
« Risposta #2 il: 02 Aprile 2017, 20:34:32 »
Grazie!

 ;D ;D
Bye by Afo

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:[Risolto] Comportamento variabili locali
« Risposta #3 il: 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.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Franco_da_vc

  • Grande Gambero
  • ***
  • Post: 215
  • Non è mai troppo tardi!
    • Mostra profilo
Re:[Risolto] Comportamento variabili locali
« Risposta #4 il: 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.
Bye by Afo

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.724
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:[Risolto] Comportamento variabili locali
« Risposta #5 il: 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.


« Ultima modifica: 04 Aprile 2017, 01:58:07 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »