Procedure e funzioni

From Apache OpenOffice Wiki
Jump to: navigation, search


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.

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 OpenOffice.org 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 OpenOffice.org 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
Documentation note.png Il metodo per passare i parametri alle procedure e alle funzioni in OpenOffice.org è virtualmente identico a quello di VBA. Per impostazione predefinita, i parametri vengono trasmessi come riferimento. Per passare i parametri come valori, utilizzate la parola chiave ByVal. In VBA potete utilizzare anche la parola chiave ByRef per forzare il passaggio di un parametro come riferimento. OpenOffice.org Basic riconosce questa parola chiave ma la ignora, perché costituisce già la procedura predefinita di OpenOffice.org Basic.

Parametri opzionali

Le funzioni e le procedure possono essere chiamate solo se durante la chiamata vengono passati tutti i parametri necessari.

OpenOffice.org Basic consente di definire i parametri come opzionali, ovvero se i valori corrispondenti non sono inclusi in una chiamata, OpenOffice.org 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.

Documentation note.png La parola chiave ParamArray presente in VBA non è supportata in OpenOffice.org Basic.

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.

Documentation note.png I livelli di ricorsività vengono impostati in modo diverso a seconda della piattaforma software. Per Windows, il livello di ricorsività è 5800. Per Solaris e Linux, viene eseguita una valutazione della dimensione dello stack e il livello di ricorsività viene calcolato di conseguenza.
Content on this page is licensed under the Public Documentation License (PDL).
Personal tools