構造化プログラミングでは、モジュール方式よる機能単位の分割が行われます。処理を機能単位で切り分けることで、生産効率を高めます。「順次・選択・反復」の論理構造を使ってプログラム本体(メインルーチン)が記述されることを前回までに説明しました。このプログラム内で繰り返し使用される処理をサブルーチンに分割することができます。
サブルーチンとは
プログラムを開始してから終了までに行われる一連の処理をルーチン(routine)と呼びます。
これまで説明してきたデータ、変数、式、演算子、倫理構造で簡単なプログラムを作成することができます。実際、マクロや簡単なプログラミングのコードの行数はそれほど多くはなく、ルーチンもあまり複雑になることはありません。しかし、少々大きめの行数が多いプログラムを作成するようになると、そのルーチン内に同じような処理が繰り返し発生することがよくあります。また、行数が増えることにより視認性が低下してミスも増えるようになります。そこで、ある程度機能的にまとまった処理をサブルーチン(subroutine)として分割して、プログラム構造を明確にするという手法が採られます。
この図では、メインルーチン内の処理Bをサブルーチン化し、メインルーチンから必要に応じて呼び出す(call)ようにしています。処理Bをメインルーチンに複数回記述するのではなく、サブルーチンとして一度記述するだけで何度でも利用できるようになります。
引数と戻り値
サブルーチンに値を渡したり、サブルーチンから処理した値を返したりすることができます。この渡される値を引数(argument)、返される値を戻り値または返り値(return value)と呼びます。以下に一般的なサブルーチンの書式を示します。
サブルーチン名:
処理
return 戻り値
このサブルーチンは次のようにメインルーチンから呼び出されます。
call サブルーチン名 引数
または
Gosub サブルーチン名 引数
call(秀丸マクロ)/Gosub(AHK)を例にしましたが、プログラミング言語により異なることに注意してください。
サブルーチンはメインルーチンからだけでなく、サブルーチンからも呼び出すことができます。
注意すべきこと
サブルーチンは繰り返し使用される処理をまとめた機能ブロックですが、繰り返し使用されるからといってわずか1、2行の単純な処理をサブルーチン化してもメリットはありません。ある程度まとまった処理に対して有効です。
また、長すぎるサブルーチンも好ましくありません。視認性が損なわれる可能性があります。設計次第ではさらに分割できる場合がありますので、できるだけシンプルなサブルーチン(機能ブロック)を作成するよう心懸ける必要があります。
繰り返し使用される処理をサブルーチン化することで、プログラムがより一層見やすくなり、記述しやすくなります。
サブルーチンは、関数、メソッドなどとほぼ同義ですが、プログラミング言語によっては区別しているものがあります。この区別については次回に説明する予定です。
サブルーチンについては、このくらいで。次回は「関数」について説明します。
では、また。