19/05/2023: A causa di un errore sono stati cancellati, insieme ad account creati da bot, alcuni account legittimi. Si prega di leggere qui: https://www.gambas-it.org/smf/index.php?topic=9733.0
Public Sub Main() Print "Fibonacci(28) = "; Fibonacci(28)EndPrivate Function Fibonacci(n As Integer) As Integer If (n < 2) Then Return n Else Return Fibonacci(n - 2) + Fibonacci(n - 1) EndifEnd
Return Fibonacci(n - 2) + Fibonacci(n - 1)
Private l As LongPublic Sub Main() Print "Eterno ritorno = "; l Sleep 0.3 Inc l Main()End
la visibilità delle variabili locali si spegne.
È questo che intendi dire?
...mo' che sorpresa al riguardo hai ?
Cioè se invece di dichiarare una variabile di tipo Private, avessi usato una variabile locale (dim l as long), al rientro nella funzione (in questo caso nel Main) si sarebbe annullata per poi generarsi nuovamente, ovviamente con valore iniziale=0, ogni volta?È questo che intendi dire?
SUB Miasub() STATIC...END SUB
E' così fin dai tempi del Quick Basic, all'uscita di una procedura le variabili locali venivano distrutte per poi essere ricreate alla chiamata successiva. L'unica differenza è che nel QB era possibile conservare le variabili tra una chiamata e l'altra usando la parola STATIC all'inizio della procedura, in questa maniera:Codice: [Seleziona]SUB Miasub() STATIC...END SUBMentre in Gambas non mi risulta sia possibile. Attendo di essere smentito as usual.
Public Sub Form_Open() Print "Fibonacci(28) = "; Fibonacci(28)EndStatic Private Function Fibonacci(n As Integer) As Integer If (n < 2) Then Return n Else Return Fibonacci(n - 2) + Fibonacci(n - 1) EndifEnd
E' così fin dai tempi del Quick Basic, all'uscita di una procedura le variabili locali venivano distrutte per poi essere ricreate alla chiamata successiva. L'unica differenza è che nel QB era possibile conservare le variabili tra una chiamata e l'altra usando la parola STATIC all'inizio della procedura, in questa maniera:Codice: [Seleziona]SUB Miasub() STATIC...END SUBMentre in Gambas non mi risulta sia possibile. Attendo di essere smentito as usual. Si lo puoi usare anche in Gambas ma solo in una classe, ad esempio:Codice: [Seleziona]Public Sub Form_Open() Print "Fibonacci(28) = "; Fibonacci(28)EndStatic Private Function Fibonacci(n As Integer) As Integer If (n < 2) Then Return n Else Return Fibonacci(n - 2) + Fibonacci(n - 1) EndifEnd
Quindi se i antepongo (esempio Gianluigi) la parola STATIC alla procedura, le variabili dichiarate (per esempio Dim i as integer) dentro la procedura non vengono azzerate all'uscita?
Citazione da: kicco - 01 Febbraio 2017, 16:16:07Quindi se i antepongo (esempio Gianluigi) la parola STATIC alla procedura, le variabili dichiarate (per esempio Dim i as integer) dentro la procedura non vengono azzerate all'uscita?Giusto è proprio quello il significato di static.
Public Sub Form_Open() Dim i As Byte For i = 1 To 3 Print "ia * iBO= "; BO(i) Next EndStatic Private Function BO(ia As Integer) As Integer Dim iBO As Integer iBO = ia * iBO Return iBO End
Ma ibo non è zero e se io moltiplico per zero cosa ottengo?