Difference between revisions of "EN/Documentation/BASIC Guide/Procedures and Functions"
(New page: {{EN/Documentation/BASICGuideTOC/v2 |ShowPrevNext=block |ShowPrevPage=block |PrevPage=Documentation/BASIC Guide/Loops |NextPage=Documentation/BASIC Guide/Error Handling |lang=block }} {{DI...) |
|||
Line 6: | Line 6: | ||
|lang=block | |lang=block | ||
}} | }} | ||
− | {{DISPLAYTITLE: | + | {{DISPLAYTITLE:Procedure e funzioni}} |
− | + | 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 è: |
<source lang="oobas"> | <source lang="oobas"> | ||
Line 20: | Line 21: | ||
</source> | </source> | ||
− | + | L'esempio definisce una procedura denominata <tt>Test</tt> 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. |
<source lang="oobas"> | <source lang="oobas"> | ||
Line 33: | Line 35: | ||
</source> | </source> | ||
− | + | 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: | |
<source lang="oobas"> | <source lang="oobas"> | ||
Line 42: | Line 44: | ||
</source> | </source> | ||
− | + | Il codice definisce una variabile <tt>A</tt> alla quale assegna il risultato della funzione <tt>Test</tt>. | |
− | + | 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. | |
<source lang="oobas"> | <source lang="oobas"> | ||
Line 54: | Line 56: | ||
</source> | </source> | ||
− | + | In questo esempio, il valore restituito dalla funzione è 123. | |
− | + | Se un'assegnazione viene interrotta, la funzione restituisce un valore <tt>zero</tt> (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: | |
<source lang="oobas"> | <source lang="oobas"> | ||
Line 66: | Line 68: | ||
</source> | </source> | ||
− | == | + | ==Termine anticipato di procedure e funzioni== |
− | {{OOo}} Basic | + | In {{OOo}} Basic, potete utilizzare i comandi <tt>Exit Sub</tt> e <tt>Exit Function</tt> 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 <tt>ErrorOccured</tt> assume il valore <tt>True</tt>. | |
<source lang="oobas"> | <source lang="oobas"> | ||
Line 83: | Line 85: | ||
</source> | </source> | ||
− | == | + | == 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 <tt>A</tt> e una stringa <tt>B</tt> come parametri. | |
<source lang="oobas"> | <source lang="oobas"> | ||
Line 93: | Line 95: | ||
</source> | </source> | ||
− | + | I parametri vengono normalmente [http://en.wikipedia.org/wiki/Pass_by_reference#Call_by_reference passati come '''riferimento'''] in {{OOo}} Basic. Le modifiche apportate alle variabili vengono conservate anche dopo l'uscita dalla procedura o dalla funzione: | |
<source lang="oobas"> | <source lang="oobas"> | ||
Line 108: | Line 110: | ||
</source> | </source> | ||
− | + | In questo esempio il valore <tt>A</tt> definito nella funzione <tt>Test</tt> viene passato come parametro alla funzione <tt>ChangeValue</tt>. Il valore viene quindi modificato in 20 e trasmesso a <tt>TheValue</tt>, 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 <tt>ByVal</tt> preceda la dichiarazione della variabile nell'intestazione della funzione. | |
− | + | Nell'esempio precedente, se si sostituisce la funzione <tt>ChangeValue</tt> la variabile superiore A non viene influenzata dalla modifica. Dopo la chiamata della funzione <tt>ChangeValue</tt> la variabile <tt>A</tt> conserva il valore 10. | |
<source lang="oobas"> | <source lang="oobas"> | ||
Line 120: | Line 122: | ||
</source> | </source> | ||
− | {{Documentation/Note|{{OOo}} | + | {{Documentation/Note|Il metodo per passare i parametri alle procedure e alle funzioni in {{OOo}} è 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 <tt>ByVal</tt>. In VBA potete utilizzare anche la parola chiave <tt>ByRef</tt> per forzare il passaggio di un parametro come riferimento. {{OOo}} Basic riconosce questa parola chiave ma la ignora, perché costituisce già la procedura predefinita di {{OOo}} Basic.}} |
− | == | + | == Parametri opzionali == |
− | + | Le funzioni e le procedure possono essere chiamate solo se durante la chiamata vengono passati tutti i parametri necessari. | |
− | {{OOo}} Basic | + | {{OOo}} Basic consente di definire i parametri come '''opzionali''', ovvero se i valori corrispondenti non sono inclusi in una chiamata, {{OOo}} Basic passa un parametro |
+ | vuoto. Nell'esempio seguente, il parametro <tt>A</tt> è obbligatorio, mentre il parametro <tt>B</tt> è opzionale. | ||
<source lang="oobas"> | <source lang="oobas"> | ||
Line 134: | Line 137: | ||
</source> | </source> | ||
− | <tt>IsMissing</tt> | + | La funzione <tt>IsMissing</tt> controlla se un parametro è stato passato o meno. |
<source lang="oobas"> | <source lang="oobas"> | ||
Line 149: | Line 152: | ||
</source> | </source> | ||
− | + | L'esempio verifica in primo luogo se il parametro <tt>B</tt> è stato passato e, se necessario, passa lo stesso parametro alla variabile interna <tt>B_Local</tt>. Se il parametro corrispondente non è | |
+ | presente, viene passato a <tt>B_Local</tt> un valore predefinito (in questo caso, il valore 0) anziché il parametro passato. | ||
− | {{Documentation/Note| | + | {{Documentation/Note|La parola chiave <tt>ParamArray</tt> presente in VBA non è supportata in {{OOo}} 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 <tt>42</tt>, <tt>-42</tt> e <tt>3.14</tt>: | |
<source lang="oobas"> | <source lang="oobas"> | ||
Line 178: | Line 183: | ||
</source> | </source> | ||
− | + | L'esempio restituisce il fattoriale del numero <tt>42</tt> mediante chiamate ricorsive della funzione <tt>CalculateFactorial</tt> finché non raggiunge la condizione base <tt>0! = 1</tt>. | |
− | {{Documentation/Note| | + | {{Documentation/Note|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.}} |
{{PDL1}} | {{PDL1}} | ||
{{InterWiki_Languages_BasicGuide|articletitle=Documentation/BASIC Guide/Procedures and Functions}} | {{InterWiki_Languages_BasicGuide|articletitle=Documentation/BASIC Guide/Procedures and Functions}} |
Revision as of 18:22, 25 June 2009
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). |