Differenze tra le versioni di "Scrivere una Funzione"

Da Gambas-it.org - Wikipedia.
Riga 109: Riga 109:
 
  <FONT color=#006400>' ''Invochiamo la funzione nel Modulo e le passiamo un valore di tipo Byte (in questo esempio: 6 ).''
 
  <FONT color=#006400>' ''Invochiamo la funzione nel Modulo e le passiamo un valore di tipo Byte (in questo esempio: 6 ).''
 
  ' ''Essa, a sua volta, ci passerà un valore che inseriremo nella variabile "by":''</font>
 
  ' ''Essa, a sua volta, ci passerà un valore che inseriremo nella variabile "by":''</font>
     by = Module1.alibaba(6)
+
     by = Module1.funzioneNelModulo(6)
 
    
 
    
 
     Print by
 
     Print by
Riga 117: Riga 117:
  
 
Nel Modulo avremo:
 
Nel Modulo avremo:
  '''Public''' Function alibaba(a As Byte) As Byte  ' Riceve dalla funzione chiamante un valore, ed un valore di tipo Byte a sua volta restituirà   
+
  '''Public''' Function funzioneNelModulo(a As Byte) As Byte  <FONT color=#006400>' ''Riceve dalla funzione chiamante un valore, ed un valore di tipo Byte a sua volta restituirà''</font>  
 
    
 
    
 
   Dim b As Byte   
 
   Dim b As Byte   
Riga 126: Riga 126:
 
     b = b * a   
 
     b = b * a   
 
    
 
    
  <FONT color=#006400>' ''Restituisce, quindi, alla funzione chiamante il risultato dell'operazione:''</font>
+
  <FONT color=#006400>' ''Restituisce, quindi, alla funzione chiamante, presente nella Classe principale, il risultato dell'operazione:''</font>
 
     Return b
 
     Return b
 
    
 
    

Versione delle 10:41, 17 mar 2013

Una Funzione |1| |2| è una routine, chiamata da una routine principale, alla quale è delegato il compito di svolgere una serie di operazioni, e delle quali essa restituisce alla routine principale chiamante il risultato.

Esempio:

Public Sub Button1_Click() ' routine principale chiamante

Dim risultato_di_ritorno As Integer
Dim a, b As Integer

a = 2
b = 3

 ' Chiama la Funzione, e le passa i due valori, affinché li elabori.
 ' Alla fine la Funzione restituirà il risultato che riempirà la variabile integer "risultato_di_ritorno":
    risultato_di_ritorno = funzione_chiamata(a, b)

 ' Mostriamo il risultato in console:
    Print "Risultato di ritorno dalla funzione = "; risultato_di_ritorno

End


 ' La routine Funzione contiene il proprio nome ed i parametri come variabili dei valori passati dalla routine chiamante,
 ' e non prevede l'aggiunta della parola Sub.
 ' Essa, poiché restituisce - in questo nostro esempio - un valore Integer, termina la propria dichiarazione con: As Integer.
Public Function funzione_chiamata(aF As Integer, bF As Integer) As Integer

 Dim somma As Integer

   somma = aF + bF '|3|

' Viene restituito il risultato alla routine chiamante:
   Return somma

End

In console avremo coerentemente:
Risultato di ritorno dalla funzione = 5


...e se la Funzione deve restituire due o più risultati ?

Per ottenere da una medesima Funzione due o più risultati (quindi senza dover utilizzare una variabile globale), possiamo utilizzare un array.

Facciamo un esempio di una Funzione che restituisce un duplice risultato:

Public Sub Button1_Click() ' routine principale chiamante

Dim risultato_di_ritorno As Integer[]
Dim a, b As Integer

a = 2
b = 3

 ' Chiama la Funzione, e le passa i due valori, affinché li elabori.
 ' Alla fine la Funzione restituirà il risultato che riempirà la variabile integer[] "risultato_di_ritorno":
    risultato_di_ritorno = funzione_chiamata(a, b)

 ' Mostriamo il primo risultato (la somma) in console:
    Print "Risultato (somma) di ritorno dalla funzione = "; risultato_di_ritorno[0]

 ' Mostriamo il secondo risultato (la differenza) in console:
    Print "Risultato (differenza) di ritorno dalla funzione = "; risultato_di_ritorno[1]

End


 ' La routine Funzione, poiché restituisce - in questo nostro esempio - un valore Integer[],
 ' termina la propria dichiarazione con: As Integer[].
Public Function funzione_chiamata(aF As Integer, bF As Integer) As Integer[]

 Dim somma As Integer
 Dim differenza As Integer
 Dim doppiorisultato As New Integer[]

   somma = aF + bF
   differenza = bF - aF

 ' Nel primo campo dell'array inseriamo il valore contenuto dalla variabile Integer "somma":
   doppiorisultato.Add(somma)

 ' Nel secondo campo dell'array inseriamo il valore contenuto dalla variabile Integer "differenza":
   doppiorisultato.Add(differenza)


 ' Dunque ora la variabile Integer[] "doppiorisultato" contiene due valori.
 ' Tale duplice contenuto di questa variabile Integer[] viene restituito alla routine principale chiamante:
   Return doppiorisultato

End

In console avremo coerentemente:
Risultato (somma) di ritorno dalla funzione = 5
Risultato (differenza) di ritorno dalla funzione = 1


Scrivere ed invocare una Funzione in un Modulo

La scrittura e la successiva invocazione di una Funzione in un Modulo segue la procedura normale.


Facciamo un semplissimo esempio.

Nella Classe principale avremo il seguente codice:

Public Sub Form_Open()  
 
Dim by As Byte  
  
' Invochiamo la funzione nel Modulo e le passiamo un valore di tipo Byte (in questo esempio: 6 ).
' Essa, a sua volta, ci passerà un valore che inseriremo nella variabile "by":
   by = Module1.funzioneNelModulo(6)
 
   Print by
 
End


Nel Modulo avremo:

Public Function funzioneNelModulo(a As Byte) As Byte  ' Riceve dalla funzione chiamante un valore, ed un valore di tipo Byte a sua volta restituirà  
  
 Dim b As Byte  
  
  b = 2  
  
' La Funzione effettua l'operazione per la quale è stata concepita:
    b = b * a  
  
' Restituisce, quindi, alla funzione chiamante, presente nella Classe principale, il risultato dell'operazione:
    Return b
  
End



Note

[1] «La "funzione" di una cosa è ciò che la sola cosa può compiere.» (Platone, La Repubblica)

[2] Si rinvia anche a Wikipedia per una definizione più ampia della Funzione.

[3] La tipologia delle variabili aF e bF è stata già dichiarata all'interno dei parametri della Funzione: (aF As Integer, bF As Integer).