擬似言語の戻り値・手続と関数の違い|return と ○ の読み方【基本情報技術者試験 科目B】

基本情報技術者試験

現行FE シラバス Ver9.2 準拠擬似言語の記述形式は2022年から変更なし最終更新 2026-10-17

手続や関数を呼び出すときに渡すものが引数、呼び出し元へ返すものが戻り値です。手続と関数も、この回で見分けられるようになります。

期間限定クーポンPR|Udemy の講座科目B オリジナル模試 3回分・60問42%OFF 1,500円2,600円中身を見る ›

この回で分かること

呼ばれた側が戻り値を返すなら、呼び出しを ← の右に書けるようになります。

戻り値を返すのが関数、返さないのが手続。見分けるのは、宣言の1か所だけです。

戻り値 ── 呼んだ側へ、値を1つ返す

2つ受け取って、足した結果を返す関数です。

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

return は「この値を、呼び出した相手に返す」という意味です。tasu(2, 3) なら a が 2、b が 3 なので、2 + 3 = 5 が返ります。

返ってきた値は、そのまま箱に入れられます。

整数型: g ← tasu(2, 3)

矢印の右に呼び出しが書けるのは、そこから値が返ってくるからです。返ってきた 5 が、そのまま g に入ります。

自動販売機と、照明のスイッチ

引数を「自動販売機に入れるお金」とすると、戻り値は、出てくるジュースです。入れたら、何かが出てくる ── これが関数。

いっぽう照明のスイッチは、押せば部屋は明るくなりますが、手元には何も出てきません。これが手続です。

手を出したときに、何か受け取れるかどうか。違いはそこだけです。

呼び出し側の tasu(2, 3) の 2 と 3 が a と b に入り、中で a + b を計算し、return で 5 が返って g に入る

渡して、中で使って、返す。この3つが1本につながっている

呼び出しの1行 整数型: g ← tasu(2, 3) の中で、この3つが全部起きています。

返す型は、宣言の先頭に書いてある

○整数型: tasu(…) の 整数型 が、返ってくるものの型です。括弧の中が入口、名前の前が出口と覚えると迷いません。

(令和8年度 基本情報技術者試験 科目B 公開問題 問2)実際の出題では ○8ビット型: complement(8ビット型: x) の中に return y があり、問題文が「x に加算すると00000000 になる値を返す」と説明しています。宣言の先頭の型と、問題文の説明 ── 手がかりはこの2つです。

return は記述形式の表に載っていない

IPAが定めた記号の一覧に return の行はありません。それでもプログラムには出てきます。上の2つの手がかりで読めるように作られているので、表に無いことは気にしなくて構いません。

返す値が無い手続には、return が出てきません。最後の行まで実行したら、呼んだ場所へ戻ります。

次のプログラムで main を呼び出しました。何が出力されますか。

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

○main()
  整数型: g ← tasu(4, 6)
  g ← tasu(g, 1)
  g を出力する

手続と関数 ── 違いは、値が返るかどうかだけ

tasu は値を返しました。返さないものもあります。並べてみます。

○整数型: tasu(整数型: a, 整数型: b)   ← 返す
○hyouji(整数型: n)                    ← 返さない

違いは○ と名前の間に型があるかどうかだけです。tasu には 整数型: があり、hyouji には何もありません。

手続 hyouji を呼ぶと出力だけして何も返さずに戻る。返るものが無いので呼び出しはそれだけで1行になる

手続 ── 呼んで、何も返さずに戻ってくる

関数 tasu を呼ぶと戻り値 5 を返して戻る。返るから ← の右に書いて箱に入れられる

関数 ── 呼んで、戻り値を返して戻ってくる

宣言を見て、手続か関数かを決める手順

  1. 行の先頭の ○ を見つける
  2. ○ のすぐ次を読む
  3. そこがいきなり名前なら手続。呼び出しは1行で完結する
  4. そこに整数型: のような型があれば関数。呼び出しは ← の右に書ける
見分け方はここだけ

これは変数の宣言(整数型: x)と同じ「コロンの前が型」の形が、そのまま使われているだけです。新しい記号を覚える必要はありません。

手続は処理をひとまとめにしたもの、関数はそれに加えて値を1つ返すもの。返す値の型が、名前の前に書かれます。

実際の出題に出てくる宣言を、同じ見方で並べておきます。

実際に出てくる宣言 呼び出しの書き方 呼んだあと、どうなるか
○proc1() proc1() 中の処理が動く。返ってくるものは無い
○putRelatedItem(文字列型: item) putRelatedItem("A") item に "A" が入って動く。返ってくるものは無い
○整数型: maximum(整数型: x, 整数型: y, 整数型: z) m ← maximum(3, 9, 5) m に 9 が入る(3つのうち最大の値が返る)
○論理型: add(整数型: value) flag ← add(3) flag に true か false が入る

宣言の実例はいずれも令和5〜8年度 科目B 公開問題より

次のプログラムで main を呼び出すと 5 が出力されました。空欄に入るのはどれですか。

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

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

○main()
  整数型: g ← 
  hyouji(g)
「1行で呼んでいるから手続」とは限らない

関数を呼んでおきながら、返ってきた値を使わないことがあります。実際の出題から引きます。

出典:令和5年度 基本情報技術者試験 科目B 公開問題 問4(プログラムの一部)

○論理型: add(整数型: value)
    …

○test()
  add(3)
  add(18)
  add(11)

add は宣言に 論理型: が付いているので関数です。それなのに test の中では、flag ← add(3) ではなく add(3) と1行で呼んでいます。

返ってきた true / false を使わずに捨てているだけで、関数であることは変わりません。種類を決めるのは呼び出し方ではなく、宣言のほうです。

1行ずつ動かして確かめる

tasu(返す)と hyouji(返さない)を、1本の中で続けて呼びます。いまどこにいるかと、g に何が入るかを並べて追ってください。

戻り値を返す関数と、返さない手続を続けて呼ぶ

当サイトオリジナルの例題


ループ開始前

いま計算していること

まだ計算していません

変数の状態

トレース表(進めると1行ずつ積み上がります)

トレース ── 呼び出しがあるときは、居場所と戻り先も書く

トレース表は、変数を横に並べて値を書き足していくのが基本です(G2-3)。呼び出しが出てくると、それだけでは足りません。いま自分がどの手続や関数を読んでいるのか、そして終わったらどの行に戻るのかが分からなくなるからです。

足す列は2つだけです。「いまどこ」と「戻り先」。次のプログラムで実際に書いてみます。

○calc()
  整数型: a ← wa(2, 3)
  整数型: b ← a + 1

○整数型: wa(整数型: x, 整数型: y)
  return x + y
実行した行 いまどこ 戻り先 a b x y
a ← wa(2, 3) calc — — — — —
wa に移る calc → wa a ← wa(2, 3) — — 2 3
return x + y(5 を返す) calc → wa a ← wa(2, 3) — — 2 3
calc に戻る calc — 5 — 消える 消える
b ← a + 1 calc — 5 6 — —
引数は、呼び出し元へ戻ったら消える

引数(x と y)は、その関数の中だけのものです。wa が終わった瞬間に消え、calc からは見えません。だからトレース表でも、呼び出し元へ戻ったところで打ち切って構いません。

戻り先の列は、呼び出しが1段なら書かなくても間に合います。ただし呼ばれた側からさらに別の手続や関数を呼ぶ形になると、戻り先を控えていないと迷子になります。

宣言の見当たらない変数が出てきたら

手続や関数の中に、引数でもなく、宣言も見当たらない変数が出てくることがあります。そのときはプログラムのいちばん上に 大域: の行がないかを探してください。大域: の変数はG10 大域変数と局所変数で扱います。

つまずきポイントまとめ

まちがえ方 正しい理解
手続と関数の区別がつかない ○ と名前の間に型があれば関数、無ければ手続
呼び出し方で種類を決めてしまう 関数でも1行で呼んで値を捨てることがある。決めるのは宣言
手続の呼び出しを ← の右に書く 返るものが無いので入れられない。1行で完結する
return を記述形式の表で探す 表には載っていない。宣言の先頭の型と問題文の説明で読む

次に読む

この記事で引用した資料

いずれも独立行政法人情報処理推進機構(IPA)が公表したものです。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では、引用した箇所の文言を改変していません(省略や補いがある場合は、その場に明記しています)。

タイトルとURLをコピーしました