14.5 函数とプロシージャとの違い / 非公式訳

p.363

函数とプロシージャとの主な違いをまとめます。

  • 全般的な目的
    函数: 型変換、論理演算、算術演算など、よくある処理に使います。合成目的としてはプロシージャよりもよく使います。
    プロシージャ: 出力が複数ある処理に使います。値は返さずに変更します。waitステートメントと組み合わせれば時間の操作ができます。ファイルの操作もできます。これは、シミュレーションの場合に重要な機能です。
  • 入出力の数
    函数: 入力は何本でも可。出力は1本のみ。
    プロシージャ: 入出力ともに何本でも可。双方向も含みます。
  • インターフェイスリスト
    函数: 入力は、定数(デフォルト)、シグナル、ファイルのいずれも可。バリアブルは不可。シグナルはサブプログラム内では作成できませんので気をつけてください。
    プロシージャ: インターフェイスリストには、どのクラスのオブジェクト(定数、シグナル、バリアブル、ファイル)でも列挙できます。デフォルトは、入力は定数であり、出力および双方向はバリアブルです。
  • サブプログラムコードおよびステートメントの性質
    函数: シーケンシャルコードであるため、waitを除いてシーケンシャルステートメントのみ(プロセスにおける場合と同じ)。入れ子にしたサブプログラムコールは可能。
    プロシージャ: 上に同じ。ただしwiatは使用できます。
  • サブプログラムの記述場所
    函数: パッケージボディのあるパッケージ内か、エンティティ、アーキテクチャ、プロセス、他のサブプログラムのいずれかの宣言領域内。
    プロシージャ: 上に同じ。
  • サブプログラムをコールできる場所
    函数: コンカレントオード内、およびシーケンシャルコード内。
    プロシージャ: 上に同じ。
  • サブプログラムコールの構造
    函数: 函数コールは式の一部。
    プロシージャ: プロシージャコールはステンドアローンステートメント
  • サブプログラムつきのジェネリックリスト、およびジェネリックリストつきのサブプログラム
    函数: 可
    プロシージャ: 可