14.5 functionとprocedureとの違い / 非公式訳

p.363

functionとprocedureとの主な違いをまとめます。

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