サブルーチン
Visual Basic (VB)、Visual Basic for Applications (VBA)、Visual Basic .NET (VB.NET) では、サブルーチンをプロシージャと総称しており、値を返すプロシージャを「Functionプロシージャ」、値を返さないプロシージャを「Subプロシージャ」と呼ぶ。さらにプロパティを定義するための構文として「Propertyプロシージャ」がある。
Pascalではfunctionおよびprocedureという予約語を使って宣言する。
引数の渡し方には、一般的なものとして以下の2つがある。
実引数を渡すときにその値だけを渡して、記憶場所(アドレス)は渡さない方法を「値呼び出し」または「値渡し」という。値呼び出しで変数を渡す場合、メインルーチンとは別にサブルーチン側で変数の記憶領域を確保し、そこにいったん値(データ)をコピーする。そのため、サブルーチン側で変数の値を変更しても、メインルーチンに戻ったときには元の値のままになる。
実引数を渡すときにその記憶場所(アドレス)を渡す方法を「参照呼び出し」または「参照渡し」という。参照呼び出しで変数を渡す場合、メインルーチンとサブルーチンとで、変数の記憶領域が共有される。そのため、サブルーチン内でその変数に対して行なった変更操作は、メインルーチンに戻ってもそのまま反映される。
一般的には戻り値によって単一の結果を出力として返すが、参照呼び出しを使うことによって複数の結果を出力として返したり、受け渡しの際のデータコピーのコストを低減したりすることもできるようになる。
なお、Pascalでは関数/手続きの内部に、それらの中でのみ呼び出し可能な別の関数/手続きを記述することもできる。関数内関数やローカル関数などと呼ばれることもある。
一般的にサブルーチンにはプログラムソースコード上で識別可能な何らかの名前が付けられ、呼び出しの際にはその名前をもとに参照されるが、名前を持たないサブルーチン(無名関数、ラムダ式)を定義できる言語もある。