手続や関数を呼び出すときに渡すものが引数、呼び出し元へ返すものが戻り値です。手続と関数も、この回で見分けられるようになります。
期間限定クーポンPR|Udemy の講座科目B オリジナル模試 3回分・60問42%OFF 1,500円この回の内容を動画で見る
次のページで講義の目次と無料の講義を見られます。受講ボタンとクーポンコードもそこにあります。
この回の内容を動画で見る
解くための再現性が身につく講義29本小テスト86問模試3回分IT資格の森で見る
講義「手続と関数(呼ぶ・引数・戻り値)」(全9分28秒)は、IT資格の森(月額1,280円)の会員向けです。科目Bは、1行ずつ値を追うアニメの講義と、講義ごとの小テスト、本番と同じ形の模擬試験がそろっています。
この回で分かること
呼ばれた側が戻り値を返すなら、呼び出しを ← の右に書けるようになります。
戻り値を返すのが関数、返さないのが手続。見分けるのは、宣言の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 に入ります。
引数を「自動販売機に入れるお金」とすると、戻り値は、出てくるジュースです。入れたら、何かが出てくる ── これが関数。
いっぽう照明のスイッチは、押せば部屋は明るくなりますが、手元には何も出てきません。これが手続です。
手を出したときに、何か受け取れるかどうか。違いはそこだけです。
渡して、中で使って、返す。この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 には何もありません。
手続 ── 呼んで、何も返さずに戻ってくる
関数 ── 呼んで、戻り値を返して戻ってくる
宣言を見て、手続か関数かを決める手順
- 行の先頭の
○を見つける ○のすぐ次を読む- そこがいきなり名前なら手続。呼び出しは1行で完結する
- そこに
整数型:のような型があれば関数。呼び出しは←の右に書ける
これは変数の宣言(整数型: 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)
関数を呼んでおきながら、返ってきた値を使わないことがあります。実際の出題から引きます。
出典:令和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が公開している科目Bの公開問題・サンプル問題(PDF)の冒頭に掲載。名称は年度により「基本情報技術者試験用」と「基本情報技術者試験,応用情報技術者試験用」があるが、本文は同一
- 令和5年度 基本情報技術者試験 科目B 公開問題(2023年7月6日公開)
- 令和6年度 基本情報技術者試験 科目B 公開問題(2024年7月5日公開)
- 令和8年度 基本情報技術者試験 科目B 公開問題(2026年7月1日公開)
いずれも独立行政法人情報処理推進機構(IPA)が公表したものです。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では、引用した箇所の文言を改変していません(省略や補いがある場合は、その場に明記しています)。


