プログラミング言語での 「関数」「サブルーチン」 とは

プログラミング言語の関数について紹介します。

概要

プログラミングでの「関数」はある一連の処理をブロック化し、外部から呼び出しができる仕組みです。サブルーチンとも呼ばれます。
一般的な関数は、複数の引数を与えることができ、関数の結果として戻り値を返すことができます。
戻り値を返さないこともでき、戻り値を返さない関数を「手続き」と呼ぶことがあります。

関数のないプログラミング言語

基本的なプログラミング言語では、関数のないプログラミング言語もあります。先頭から順番に処理を実行します。条件判定文、繰り返し処理やジャンプ命令などで処理が変わります。

先頭から実行される例
10 A=9
20 B=4
30 C=A+B
30 PRINT C
40 IF C > 10 THEN PRINT "10より大きいです"
50 A=2
60 B=6
70 C=A+B
80 PRINT C
90 IF C > 10 THEN PRINT "10より大きいです"
100 END

サブルーチンのあるプログラミング言語

同じ処理を繰り返し実行できるようにするために、サブルーチンのブロックを呼び出す命令があるプログラミング言語もあります。サブルーチンにはグローバル変数として値を渡す、サブルーチンからの戻り値もグローバル変数で受け取るといった制約のあるプログラミング言語もありますが、同じ処理を繰り返し実行できます。


下記コードでは GOSUB 1000 の命令により 1000ラインにジャンプして処理を実行し、RETURN 命令で呼び出し元のGOSUBの次の行にジャンプして処理を実行します。同じ処理をブロックとして記述することができ、プログラム中から繰り返し呼び出せます。

サブルーチンの例
10 A=4
20 B=3
30 GOSUB 1000
40 PRINT "表示しました (1/2)"
50 A=8
60 B=7
70 GOSUB 1000
80 PRINT "表示しました (2/2)"
90 END
1000 C=A+B
1010 PRINT C
1020 IF C > 10 THEN PRINT "10より大きいです"
1030 RETURN

関数

先に紹介した、サブルーチンの機能により、一連の処理を繰り返し呼び出せますが、グローバルな変数を利用して、サブルーチンへの値の受け渡しをすることや、サブルーチンからの戻り値をグローバル変数で受け取る必要があります。
グローバルな変数は状態管理をする必要があり、ほかのロジックでグローバルな変数を変更したり、ネストして呼び出す場合に変数の状態が正しいか把握しておかないと、意図した結果にならないことがあります。
上記の問題点があるため、ブロック化された処理は外部に対して閉じていたほうが不具合を減らせます。関数の機能を使うことで、与える引数や、関数からの戻り値が外部からアクセスできない仕組みになります。

下記のコードはfuncという関数を定義しています。func関数は2つの引数(パラメータ)を受け取り、その和が10以上か判定して画面にメッセージを表示する関数です。和が10より大きければ、戻り値は1となり、それ以外(10以下)であれば0を返します。

関数の例
int func(int av, int bv) {
  if (av + bv > 10) {
    printf("10より大きいです\r\n");
    return 1;
  }
  else {
    printf("10より小さいです\r\n");
    return 0;
  }
}

int main()
{
  int a = 5;
  int b = 8;
  int c = func(a, b);

  int d = 4;
  int e = 2;
  int f = func(d, e);

  char buffer[10];
  fgets(buffer, 10, stdin);
  return 0;
}


多くの言語では、関数は複数の引数/パラメーターを与えることができ、1つの戻り値を返す動作です。

AuthorPortraitAlt
著者
iPentec Document 編集部
iPentec Document 編集部です。
快適な生活のための情報、価値のある体験やレビューを提供します。
作成日: 2018-03-19
Copyright © 1995–2025 iPentec all rights reserverd.