引数の解説(基本情報技術者シラバス用語)

目次

引数とは

引数(ひきすう)とは、プログラムの中で関数(特定の処理をまとめた命令セット)を呼び出す際に、呼び出し元から関数へと渡すデータ(値や変数)のことです。関数に処理を依頼する際、「このデータを使って処理してください」と指示するための情報と言えます。関数を定義するときに受け取り側として用意する変数を「仮引数(かりひきすう)」、実引数(じつひきすう)と呼びます。引数を使うことで、一つの関数を様々なデータに対して再利用できるようになり、効率的な開発が可能になります。

具体例

消費税を計算する「taxCalculator」という関数があるとします。この関数に、商品の金額「1000」や「2500」を引数として渡すことで、それぞれの消費税額を算出させます。プログラムの記述は以下のようになります。

// priceが仮引数(受け取るための箱)
function taxCalculator(price) {
  return price * 0.1;
}
// 1000 や 2500 が実引数(実際のデータ)
let tax1 = taxCalculator(1000); // 100が返る
let tax2 = taxCalculator(2500); // 250が返る

もう少し詳しく

引数(ひきすう・パラメータ)は、関数という「処理のブラックボックス」に対して、外部から材料(データ)を投入するための重要な窓口(インターフェース)としての役割を果たします。関数は引数を受け取ることで、固定された一つの計算しかできないただのプログラムの塊から、様々なデータに対応できる汎用的で再利用可能な「部品」へと進化します。

引数の扱い方に関して、プログラミングにおいて非常に重要かつ奥深い概念として「値渡し(Call by Value)」と「参照渡し(Call by Reference)」という2つの渡し方の違いがあります。

「値渡し」とは、呼び出し元にある変数のデータの中身(値そのもの)だけをコピーして、関数の仮引数に渡す方式です。この場合、関数の中で受け取った仮引数の値を書き換えたとしても、それはあくまでコピーを変更しただけなので、呼び出し元にある元の変数の値には一切影響を与えません。安全性が高い反面、巨大なデータをコピーする際にメモリや処理時間を余分に消費するという側面があります。

一方「参照渡し」とは、データそのものではなく、データが保存されているメモリ上の「場所(アドレス、参照)」を関数に渡す方式です。関数側はそのアドレスを頼りに直接元のデータにアクセスするため、関数の中で値を書き換えると、呼び出し元の変数の値も連動して書き換わってしまいます(副作用が発生する)。配列や巨大なオブジェクトを関数に渡す際には、メモリ効率を良くするためにこの参照渡し(またはそれに近い仕組み)が暗黙的に使われることが多く、プログラマーは「関数の中で値を変更したら、外のデータも変わってしまうのかどうか」を常に意識してコーディングを行う必要があります。

試験でのポイント

基本情報技術者試験のアルゴリズムやプログラミング分野において、引数の概念はあらゆる問題の根底に関わってきます。

まず用語の定義として、「仮引数(かりひきすう)」と「実引数(じつひきすう)」の違いを問われることがあります。「関数を定義する側」の宣言文に書かれている、データを受け取るための変数が「仮引数(Parameter)」です。一方、「関数を呼び出す側」が実際に関数に渡す具体的な値や変数のことを「実引数(Argument)」と呼びます。この2つの用語の対応関係を正確に覚えておきましょう。

試験の疑似言語問題(午後・科目B)を解く際の最大のポイントは、前述した「値渡し」と「参照渡し」の区別を正確に行うことです。問題文の冒頭や仕様の説明部分に、「配列を引数として渡した場合は参照渡しとする」「単一の変数を渡した場合は値渡しとする」といったルールが明記されていることが非常に多いです。

トレース(プログラムの手動実行)を行う際、引数として配列が関数に渡され、関数内でその配列の中身が並べ替えられたり(ソート)、値が書き換えられたりする処理があった場合、メイン処理に戻った後もその配列の変更が「引き継がれている」ことを前提として次の行を読んでいかなければなりません。これを値渡しだと勘違いして、「元の配列は元のままだ」と思ってトレースを進めると、最終的な出力結果を完全に間違えてしまいます。関数が呼び出された際には、どのデータが関数に渡され、関数終了後に呼び出し元のデータがどう変化しているか(あるいは変化していないか)を、余白に図や表を描いて正確に把握することが合格への絶対条件となります。

関連する用語

関数、戻り値、値渡しと参照渡し

読んだ内容を10問練習と実技で確認

記事で理解した用語を、StudyQuestの演習とクラウド実技ラボで定着させます。

10問練習 実技ラボ