Difference between revisions of "EN/Documentation/BASIC Guide/Procedures and Functions"

From Apache OpenOffice Wiki
Jump to: navigation, search
(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 ==
  
'''プロシージャ''' は、プログラム内の特定の処理を実行するユニットのことですが、戻り値を返すことはありません。 \'8d\'5c文は以下のようになります。
+
Una '''procedura''' esegue un'azione senza fornire un valore esplicito. La sintassi è:
  
 
<source lang="oobas">
 
<source lang="oobas">
Line 20: Line 21:
 
</source>
 
</source>
  
このサンプルコードでは <tt>Test</tt> という名前のプロシージャを定義していますが、このプロシージャによる処理は、プログラム内の任意の位置から実行させることができます。プロシージャを呼び出すには、以下のようにプログラム内の該当行にプロシージャ名を記述するだけです。
+
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 ==
  
'''関数''' も、プロシージャと同様に、特定のプログラムブロックを 1 つのユニットとしてまとめたものです。プロシージャとの相違点として、関数は戻り値を返すという点があります。
+
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>
  
このコードは、変数 <tt>A</tt> を宣言してから、関数 <tt>Test</tt> の戻り値をその中に代入しています。
+
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>
  
このサンプルコードの場合、関数の戻り値は 123 となります。
+
In questo esempio, il valore restituito dalla funzione è 123.
  
戻り値の代入を行わなかった場合、その関数からは <tt>zero</tt> 値が返されます (数値関数の場合は 0 、文字列関数の場合は空白文字列)
+
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 では、<tt>Exit Sub</tt> および <tt>Exit Function</tt> コマンドを使用して、実行途中のプロシージャや関数を強制終了させることができ、エラーの処理などに便利です。 これらのコマンドは、プロシージャや関数を強制終了させてから、これらを呼び出した行にまでプログラムの実行行を戻します。
+
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.
  
以下のサンプルコードでは、変数 <tt>ErrorOccured</tt> の値が <tt>True</tt> になった場合に、プロシージャを強制終了します。
+
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 ==
  
関数やプロシージャには、1 つまたは複数のパラメータ (引数) を渡すことができます。パラメータは、関数やプロシージャの名前の後に、かっこで囲んで指定する必要があります。次の例では、整数値 <tt>A</tt> と文字列 <tt>B</tt> をパラメータとして予想するプロシージャを定義しています。
+
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>
  
通常、{{OOo}} Basic では、パラメータの[http://en.wikipedia.org/wiki/Pass_by_reference#Call_by_reference 渡し方は'''参照''']です。この場合、呼び出したプロシージャや関数が終了しても、これらの変数値に対して行われた変更はそのまま維持されます。
+
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>
  
この例では、値 <tt>A</tt> <tt>Test</tt> 関数で定義されており、それがパラメータとして <tt>ChangeValue</tt> 関数に渡されます。 その後、値は 20 に変更されて <tt>TheValue</tt> に渡されますが、これは関数が終了しても維持されます。
+
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.
  
またパラメータに対する変更をオリジナルの変数の内容に反映させたくない場合は、パラメータを '''値渡し''' で与えることも可\'94\'5cです。パラメータを値で渡すよう指定するには、関数ヘッダで変数宣言の前にキーワード <tt>ByVal</tt> を指定する必要があります。
+
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.
  
前の例では、関数 <tt>ChangeValue</tt> を置き換えた場合、上位の変数 A はこの変更による影響を受けません。 関数 <tt>ChangeValue</tt> を呼び出した後も、変数 <tt>A</tt> の値は 10 のままです。
+
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}} におけるプロシージャや関数へのパラメータの渡し方は、基本的に VBA と同じです。 標準でパラメータは、参照渡しとして与えられます。パラメータを値として渡すには、<tt>ByVal</tt> キーワードを使用します。 VBA では、キーワード <tt>ByRef</tt> を使用して、強制的に参照でパラメータを渡すこともできます。 {{OOo}} Basic では参照渡しが既に標準的な方法なので、{{OOo}} Basic はこのキーワードを認識しますが無視します。}}
+
{{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 は空のパラメータを渡します。 次の例では、パラメータ <tt>A</tt> は必須ですが、パラメータ <tt>B</tt> はオプションです。
+
{{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>
  
上記のサンプルコードでは、まずパラメータ <tt>B</tt> に値が指定されているかをチェックしてから、チェック結果に応じて、局所変数 <tt>B_Local</tt> に渡す値を変えています。 対応するパラメータが存在しない場合、<tt>B_Local</tt> には、渡されたパラメータではなく、デフォルト値 (この例では 0) が代入されます。
+
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|VBA のキーワード <tt>ParamArray</tt> は、{{OOo}} Basic ではサポートされていません。}}
+
{{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.
  
次のサンプルコードは再帰関数の使用例で、<tt>42</tt><tt>-42</tt><tt>3.14</tt> の各数値の階乗を再帰処理で求めています。
+
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>
  
上記のサンプルコードでは、数値 <tt>42</tt> の階乗を計算する際に、関数 <tt>CalculateFactorial</tt> を再帰的に呼び出し、基本条件 <tt>0! = 1</tt> になった時点で処理を終了しています。
+
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|▼▼再帰回数のレベルは、\'83\'5cフトウェアのプラットフォームごとに異なります。▼▼Windows の場合、再帰回数のレベルは 5800 です。Solaris および Linux の場合、再帰回数のレベルは、スタックサイズの計算結果を基に計算されます。}}
+
{{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.

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

Template:Documentation/Note

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.

Template:Documentation/Note

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.

Template:Documentation/Note

Content on this page is licensed under the Public Documentation License (PDL).
Personal tools