VBScript の関数とプロシージャと例

⚡ スマートサマリー

VBScriptの関数とプロシージャは、コードを再利用可能なブロックに整理します。Subプロシージャは値を返さずにステートメントを実行しますが、Functionプロシージャは関数名に値を代入することで値を返し、引数はByRefまたはByValを使用して渡されます。

  • 🧱 Code 再利用: プロシージャはコードをモジュール化することで、大規模なスクリプトでも記述、デバッグ、保守を容易にします。
  • 📤 サブ手順: Sub は Sub と End Sub の間にあるステートメントのブロックを実行しますが、値を返しません。
  • 📥 機能手順: 関数は、関数名と関数終了名の間に値を代入することで値を返します。
  • 📞 呼び出し: サブルーチンを実行するには call キーワードを使用し、関数の結果を取得するには式の中で関数名を使用します。
  • 🔁 ByRefとByValの比較: ByRefは呼び出し後も変更を保持しますが、ByValはコピーに対して動作するため、変更は保持されません。
  • ⚙️ デフォルトの通過: VBScriptは、ByValを指定しない限り、デフォルトでは引数を参照渡しします。

VBScriptの関数とプロシージャ

VBScriptプロシージャ

VBScript プロシージャは、主にコードの整理と再利用に使用されます。ここでは、VBScript の学習が目的であるため、これまでは簡単な例を使用してきました。しかし、実際のシナリオでは、コードはそれほど単純ではありません。有用なものを実装しようとすると、コードが複雑になる場合があります。数百行が何ページにもわたって広がることもあります。

コードを適切に整理しないと、コーディング、デバッグ、コードの管理のプロセス全体が非常に複雑になります。したがって、コードが簡単に管理できるように、コードを慎重に整理またはモジュール化する必要があります。

さらに、特定のアクションを実行する一連のステートメントがあるとします。 同じアクションを複数回繰り返す必要があります。 では、なぜ同じコードを何度も書く必要があるのでしょうか? 効果的な手法を使用すると、コードを再利用可能にできます。 これにより、開発者はコードを美しく整理し、テスターはバグを簡単に特定できるようになります。 つまり、コードのモジュール化と再利用は、コードをより強力で信頼性が高く、保守しやすくするために非常に重要です。 ここで手順を図にまとめます。

VBScript のプロシージャの種類

プロシージャは、理想的には単一の機能を実行するコードのブロックです。 入力を処理したりファイルを処理したりするコードのブロックは、関数の良い例です。 手続きにはXNUMX種類あります VBScript.

  1. サブプロシージャ: サブプロシージャは値を返しません。
  2. 関数プロシージャ: 関数プロシージャは、値を返したい場合に使用されます。

サブプロシージャ

値を返さずに一連のステートメントを実行する場合は、サブプロシージャを使用できます。

Sub プロシージャは、それぞれ Sub ステートメントと End Sub ステートメントで始まり、終了します。 サブプロシージャは引数を取ることができますが、値を返すことはできません。 サブプロシージャは入力を受け取る場合もあれば受け取らない場合もあります。

Sub outputMessage()
document.write("Welcome")
End Sub

このコードを書くだけでは何も出力されません。 ここでは、outputMessage という名前の Sub プロシージャを作成しました。 次に、それを呼び出す必要があります。

OutputMessage() を呼び出す

これら両方のコードセットを内部で結合します tag like this.

<script type="text/vbscript">

Sub outputMessage()
document.write("Welcome")
End Sub
call outputMessage()
</script>

このコードの出力は次のようになります

サブプロシージャ

VBScript 関数

一連のステートメントを実行して値を返したい場合は、一般に関数として知られる関数プロシージャを使用する必要があります。

Function プロシージャは、それぞれ Function ステートメントと End Function ステートメントで始まり、終了します。

関数プロシージャは入力を受け取る場合と受け取らない場合があります。

関数プロシージャは、名前に値を代入して値を返します。

<script type="text/vbscript">
Function findArea(radius)
   const pi=3.14
   area = pi*radius*radius
   findArea = area
End Function
document.write("The area of the circle when the radius is 20 is " & findArea(20) &"<br/>")
document.write("The area of the circle when the radius is 10 is " & findArea(10))

</script>

このコードの出力は次のようになります

VBScript 関数

ByRef および ByVal パラメータ

VBScript の引数は、参照または値によってプロシージャに渡すことができます。

プロシージャを呼び出すときに何も指定しない場合、デフォルトで引数が参照によって渡されます。

プロシージャが呼び出された後も引数に加えた変更を維持する場合は、VBScript 引数を参照渡しする必要があります。

引数が値によって渡される場合、呼び出されたプロシージャによって引数の値に加えられる変更は、 変数 プロシージャが呼び出された後は保持されません。

キーワード ByRef および ByVal は、それぞれ参照および値によって引数を渡すために使用されます。

違いを理解するには、まず以下のコードを実行して出力を確認します。

ステップ1) コードをエディタにコピーします

<script type="text/vbscript">
Function returnResult(ByRef value)
   value = value +1
   returnResult = value
End Function
Dim x
x=5
call returnResult(x)
document.write(x)
</script>

ステップ2) 出力は6です。

ステップ3) 関数 returnResult(ByRef value) を Function returnResult(ByVal value) に変更します。

ステップ4) これで、出力は 5 になります。

よくあるご質問

サブルーチン内で Exit Sub を、または関数内で Exit Function を使用すると、プロシージャの終了直前で処理を終了できます。その後、実行は呼び出し元の行に戻ります。

callキーワードを使用する場合は、引数を括弧で囲んでください。callを省略する場合は、複数の引数を括弧で囲まないでください。これを間違えると、VBScriptでよくある構文エラーになります。

はい。VBScriptのサブルーチンや関数は自身を呼び出すことができ、これを再帰と呼びます。呼び出しを停止する基本条件を必ず含めてください。そうしないと、スタック領域がなくなるまでスクリプトがループしてしまいます。

はい。AIは重複したステートメントを検出できます。tracそれらを適切なパラメータを持つサブルーチンまたは関数に組み込み、呼び出しを更新します。これにより、スクリプトが短くなり、保守が容易になります。

はい。AIは可能です。 tracByRef と ByVal で値がどのように変化するかを示し、それぞれの出力結果を表示し、呼び出し元が変更を確認する必要があるかどうかに基づいてどちらを使用するかを推奨します。