Procedure e funzioni
Template:EN/Documentation/BASICGuideTOC/v2
Le procedure e le funzioni costituiscono i fondamenti della struttura di un programma
e forniscono la base per suddividere un problema complesso in diverse sub-operazioni.
Contents
Procedure
Una procedura esegue un'azione senza fornire un valore esplicito. La sintassi è:
Sub Test ' ... here is the actual code of the procedure End Sub
L'esempio definisce una procedura denominata Test che contiene codice accessibile da qualsiasi punto del programma. La chiamata viene effettuata inserendo il nome della procedura nel punto pertinente del programma:
Funzioni
Una funzione, proprio come una procedura, combina un blocco di programmi per eseguirli in un'unica unità logica. Tuttavia, a differenza della procedura, la funzione restituisce un valore.
Function Test ' ... here is the actual code of the function Test = 123 End Function
Il valore restituito viene attribuito utilizzando una semplice assegnazione. L'assegnazione non va necessariamente collocata al termine della funzione, ma può essere inserita anche in qualsiasi punto della funzione.
La funzione precedente può essere richiamata all'interno di un programma nel modo seguente:
Dim A A = Test
Il codice definisce una variabile A alla quale assegna il risultato della funzione Test.
Il valore restituito può essere sovrascritto diverse volte all'interno della funzione. Come nel caso dell'assegnazione classica delle variabili, la funzione di questo esempio restituisce il valore che le era stato assegnato per ultimo.
Function Test Test = 12 ' ... Test = 123 End Function
In questo esempio, il valore restituito dalla funzione è 123.
Se un'assegnazione viene interrotta, la funzione restituisce un valore zero (numero 0 per i valori numerici e una stringa vuota per le stringhe).
Il valore restituito da una funzione può essere di qualsiasi tipo. Il tipo è dichiarato nello stesso modo di una dichiarazione di variabile:
Function Test As Integer ' ... here is the actual code of the function End Function
Termine anticipato di procedure e funzioni
In Apache OpenOffice Basic, potete utilizzare i comandi Exit Sub e Exit Function per terminare anticipatamente una procedura o una funzione, ad esempio per gestire un errore. Questi comandi interrompono la procedura o la funzione e riportano il programma al punto in cui la procedura o la funzione erano state richiamate.
L'esempio seguente mostra una procedura che termina l'implementazione quando la variabile ErrorOccured assume il valore True.
Sub Test Dim ErrorOccured As Boolean ' ... If ErrorOccured Then Exit Sub End If ' ... End Sub
Passaggio dei parametri
Le funzioni e le procedure possono accettare uno o più parametri. I parametri essenziali devono essere racchiusi tra parentesi dopo il nome della funzione o della procedura. L'esempio che segue definisce una procedura che prevede un valore intero A e una stringa B come parametri.
Sub Test (A As Integer, B As String) ' ... End Sub
I parametri vengono normalmente passati come riferimento in Apache OpenOffice Basic. Le modifiche apportate alle variabili vengono conservate anche dopo l'uscita dalla procedura o dalla funzione:
Sub Test Dim A As Integer A = 10 ChangeValue(A) ' The parameter A now has the value 20 End Sub Sub ChangeValue(TheValue As Integer) TheValue = 20 End Sub
In questo esempio il valore A definito nella funzione Test viene passato come parametro alla funzione ChangeValue. Il valore viene quindi modificato in 20 e trasmesso a TheValue, e conservato all'uscita dalla funzione.
In alternativa è possibile passare un parametro come valore se non si desidera che successive modifiche al parametro incidano sul valore trasmesso in origine. Per specificare che un parametro deve essere passato come valore, assicurarsi che la parola chiave ByVal preceda la dichiarazione della variabile nell'intestazione della funzione.
Nell'esempio precedente, se si sostituisce la funzione ChangeValue la variabile superiore A non viene influenzata dalla modifica. Dopo la chiamata della funzione ChangeValue la variabile A conserva il valore 10.
Sub ChangeValue(ByVal TheValue As Integer) TheValue = 20 End Sub
Parametri opzionali
Le funzioni e le procedure possono essere chiamate solo se durante la chiamata vengono passati tutti i parametri necessari.
Apache OpenOffice Basic consente di definire i parametri come opzionali, ovvero se i valori corrispondenti non sono inclusi in una chiamata, Apache OpenOffice Basic passa un parametro vuoto. Nell'esempio seguente, il parametro A è obbligatorio, mentre il parametro B è opzionale.
Sub Test(A As Integer, Optional B As Integer) ' ... End Sub
La funzione IsMissing controlla se un parametro è stato passato o meno.
Sub Test(A As Integer, Optional B As Integer) Dim B_Local As Integer ' Check whether B parameter is actually present If Not IsMissing (B) Then B_Local = B ' B parameter present Else B_Local = 0 ' B parameter missing -> default value 0 End If ' ... Start the actual function End Sub
L'esempio verifica in primo luogo se il parametro B è stato passato e, se necessario, passa lo stesso parametro alla variabile interna B_Local. Se il parametro corrispondente non è presente, viene passato a B_Local un valore predefinito (in questo caso, il valore 0) anziché il parametro passato.
Ricorsività
Una procedura o una funzione ricorsiva ha la capacità di richiamare se stessa finché non rileva che una determinata condizione base è stata soddisfatta. Quando la funzione è richiamata con la condizione base, viene restituito un risultato.
L'esempio seguente utilizza una funzione ricorsiva per calcolare il fattoriale dei numeri 42, -42 e 3.14:
Sub Main Msgbox CalculateFactorial( 42 ) ' Displays 1,40500611775288E+51 Msgbox CalculateFactorial( -42 ) ' Displays "Invalid number for factorial!" Msgbox CalculateFactorial( 3.14 ) ' Displays "Invalid number for factorial!" End Sub Function CalculateFactorial( Number ) If Number < 0 Or Number <> Int( Number ) Then CalculateFactorial = "Invalid number for factorial!" ElseIf Number = 0 Then CalculateFactorial = 1 Else ' This is the recursive call: CalculateFactorial = Number * CalculateFactorial( Number - 1 ) Endif End Function
L'esempio restituisce il fattoriale del numero 42 mediante chiamate ricorsive della funzione CalculateFactorial finché non raggiunge la condizione base 0! = 1.
Content on this page is licensed under the Public Documentation License (PDL). |