基本情報技術者(FE)対策

擬似言語の関数

関数はコードに名前を付けたもの

前回までは、1 つながりのコードを上から順に追ってきました。ここからは、コードをいくつかの部品に切り分けて、それぞれに名前を付ける書き方を読みます。この部品が関数です。関数とは、値を受け取って処理をし、結果の値を 1 つ返す部品のことです。

擬似言語では、行頭の丸印 ○ が「ここから新しい部品の定義が始まる」という目印になります。

○整数型: tasu(整数型: a, 整数型: b) 整数型: kotae kotae ← a + b return kotae

1 行目が定義の見出しにあたる行です。○ のあとの「整数型」は返す値の型、tasu が関数の名前、丸括弧の中に並んでいるのが引数の宣言です。引数とは、呼び出す側から関数へ渡される値のことです。この関数は整数を 2 つ受け取り、整数を 1 つ返します。

最後の return が、値を返して関数を終わらせる命令です。return まで来た時点で、その下に行があっても実行されません。

手続きは値を返さない

○ のあとに型が書かれていない定義もあります。

○hyouji(整数型: n) n を出力する

これは手続きと呼ばれ、何かをするだけで値を返しません。返す値がないので return kotae のような行も出てきません。本試験では、この見出し行に型が付いているかどうかだけで、値が返ってくるかどうかを判断できます。呼び出しの行が x ← hyouji(3) のように代入の形になっていたら、それは手続きの誤用です。選択肢の正誤を切る手がかりになります。

引数は名前ではなく位置で対応する

呼び出す側は、次のように書きます。

seikai ← tasu(5, 2)

このとき 5 が a に、2 が b に入ります。対応するのは名前ではなく並んだ位置です。呼び出す側の変数名が p や q であっても、定義側では a と b という名前で扱われます。ここを名前でつなげて読もうとすると、引数が 2 つ以上ある問題で必ず混乱します。1 つ目は 1 つ目へ、2 つ目は 2 つ目へと、位置だけで結び付けてください。

渡されるのは変数そのものではなく、その時点の値です。定義側で a の値を書き換えても、呼び出した側の変数は変わりません。

局所変数は関数の中だけで生きる

上の例の kotae は tasu の中で宣言された変数で、局所変数と呼びます。呼び出した側からは見えませんし、関数が終わると同時に消えます。別の関数に同じ kotae という名前の変数があっても、それは別物です。

この「終わると消える」性質は、次のレッスンからのトレースで効いてきます。関数の呼び出しが終わった行では、その関数の中の変数を表から消す、と決めておくと表が読みやすくなります。

関数が出てきたときの読む手順

関数が並んだコードは、上から順に読むものではありません。次の手順で追います。

  1. まず、どの関数が最初に動くのかを探す
  2. 呼び出しの行で、引数に渡る値を書き出す
  3. 定義側へ飛び、その中を追って戻り値を確かめる
  4. 呼び出しの行へ戻り、戻り値を式にはめ込む

定義がコードの上のほうに書かれていても、そこから読み始める必要はありません。呼ばれて初めて動くからです。次のレッスンで、この行き来を実際に表で追います。

生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア
編集 LuaGate編集部