擬似言語の演算子「.」|メンバ変数とメソッドの読み方【基本情報技術者試験 科目B】

基本情報技術者試験

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

プログラムの中に listHead.next や prioQueue.size() のような、点でつながれた書き方が出てくることがあります。見慣れないと身構えますが、読み方はひとつだけです。. は「〜の中の」と読みます。

なぜ、箱の中に箱を入れるのか

生徒1人ぶんのデータを持ちたいとします。名前と点数の2つです。ここまでの書き方だと、こうなります。

文字列型: namae ← "田中"
整数型: ten ← 80

2人めが出てくると namae2、ten2 と増えていきます。しかもどの名前とどの点数が同じ人のものかは、名前の付け方で察するしかありません。

そこで、1人ぶんをひとまとめにして、1つの名前で持ちます。

Seito: seito

seito という大きい箱が1つあって、その中に namae と ten という名前の付いた小さい箱が入っている ── そういう形です。

namae と ten をばらばらの変数で持つ形と、seito という1つの箱にまとめて持つ形の対比

1つの名前の中に、名前の付いた箱が入っている。取り出すのが「.」

中の箱を取り出すのが .

seito.namaeseito の中の namae → "田中"

seito.tenseito の中の ten → 80

. は「〜の中の」と読みます。左に書いたものの中から、右に書いた名前のものを取り出す ── これだけです。

取り出したあとは、ふつうの箱とまったく同じです。読めますし、書き換えもできます。

seito.ten ← seito.ten + 10
seito.ten を出力する

seito.ten が 80 なら、1行目で 90 になり、2行目で 90 が出ます。代入の読み方も変わりません。

. は、IPAが定めた演算子

出典:IPA「擬似言語の記述形式」〔演算子と優先順位〕の注記

演算子 . は,メンバ変数又はメソッドのアクセスを表す。

いま namae や ten と呼んでいた中の箱のことを、正式にはメンバ変数といいます。もう1つのメソッドは、このあと扱います。

優先順位はいちばん上

優先順位の表では、. は () と同じいちばん上の段にあります。つまりどの計算よりも先に、この取り出しが行われます。

seito.ten + 1 なら、先に seito.ten を取り出してから 1 を足します。迷う場面はほとんどありません。

[ ] と . は、指し方が違う

配列は data[3] のように番号で指しました。. は seito.ten のように名前で指します。

どちらも「中から1つ取り出す」点は同じです。同じものが並んでいて番号で呼ぶのが配列、違うものが入っていて名前で呼ぶのがメンバ変数だと考えてください。

次の書き方は、どう読みますか。

seito.ten

中に何が入っているかは、表で与えられる

seito の中に namae と ten がある ── この中身の一覧が、実際の出題では表で示されます。覚えておく必要はありません。

出典:基本情報技術者試験 科目B サンプル問題 問10

クラス ListElement は,単方向リストの要素を表す。クラス ListElement のメンバ変数の説明を表に示す。

表 クラス ListElement のメンバ変数の説明

メンバ変数 型 説明
val 文字型 要素の値
next ListElement 次の要素の参照
次の要素がないときの状態は未定義

listHead の中には val と next の2つが入っている、と読めます。そして next の型が ListElement 自身になっているのがポイントです。中の箱が、また同じ形の箱を指しているわけです。

listHead の中の val は "A"、next は次の箱を指し、listHead.next.val は "B" になる

「.」は「〜の中の」。左のものの中から、右の名前を取り出す

この表さえあれば読める

listHead.val先頭の要素の値

listHead.next次の要素そのもの

listHead.next.val次の要素の値

実際の出題では、メンバ変数の名前と意味は必ず表で与えられます。覚えておく必要はありません。表を見ながら読むのが正しい解き方です。

[ ] と . は、指し方が違う

配列は data[3] のように番号で指しました。. は a.val のように名前で指します。

どちらも「中から1つ取り出す」点は同じです。番号で並んでいるものが配列、名前が付いているものがメンバ変数だと考えてください。

要素が1列に並んだリストです。1つの要素は2つのものを持ちます ── val(その要素の値)と next(次の要素)。
先頭から "A"、"B"、"C" と並んでいて、listHead が先頭の要素です。listHead.next.val はどれですか。

メソッド ── 中に入っている、名前の付いた部品

取り出されるのが部品のときは、メソッドといいます。うしろに括弧が付くので見分けられます。

出典:基本情報技術者試験 科目B サンプル問題 問8(プログラムの一部)

prioQueue.enqueue("A", 1)
prioQueue.dequeue()  /* 戻り値は使用しない */
while (prioQueue.size() が 0 と等しくない)

読み方は「prioQueue の中の enqueue を呼ぶ」。呼び出し方は手続や関数とまったく同じで、括弧の中に引数を並べます。

見分けるのは括弧だけ

メンバ変数a.val 括弧が付かない。箱なので読み書きできる

メソッドa.size() 括弧が付く。部品なので呼ぶと動く

手続と関数の見分けと同じで、戻り値があれば ← の右に置け、無ければ1行で完結します。

戻り値を使わないこともある

上の prioQueue.dequeue() には /* 戻り値は使用しない */ という注釈が付いています。値を返すのに、受け取らずに捨てているということです。

G3-3 で見た「1行で呼んでいるから手続とは限らない」と、まったく同じ話です。

b は、次の説明が与えられたクラスの実物です。

b が持っているもの

持っている値count(回数)

してもらえる処理reset() … 回数を 0 に戻す

次の2行は、それぞれ何をしていますか。

b.reset()
整数型: n ← b.count

点がつながったとき ── 左から1つずつ

実際の出題では、. が2つ続くことがあります。

出典:基本情報技術者試験 科目B サンプル問題 問10(解答群より)

listHead.nextlistHead.next.nextprev.nextprev.next.next

つながった . を読む手順

  1. いちばん左の名前を見る。それが出発点
  2. 最初の . の右を取り出す。ここで「別のもの」に移っている
  3. 次の . の右を、いま移ったものの中から取り出す
  4. 点の数だけ繰り返す。1つの点で、1つ先へ進む

途中で戻ることはありません。左から右へ、一方通行です。

1行ずつ動かして確かめます。prev がリストの上を1つずつ進んでいくところを見てください。

点をたどると、1つずつ先へ進む

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


ループ開始前

配列

▲ いま読んでいる▲ いま書いた

いま計算していること

まだ計算していません

変数の状態

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

「1つ先」か「2つ先」かで、答えが変わる

サンプル問題 問10 は、単方向リストから要素を1つ削除する手続です。空欄に入るのは prev.next.next(正解はカ)。

prev.next は消したい要素、prev.next.next はその次の要素。消したい要素を飛ばして、その次につなぎ替えるので、点が2つ要ります。点の数を1つ間違えるだけで、別の答えになります。

つまずきポイントまとめ

まちがえ方 正しい理解
. を名前の一部だと思う 演算子。優先順位の表のいちばん上の段にある
メンバ変数の意味を覚えようとする 実際の出題では必ず表で与えられる。見ながら読む
メンバ変数とメソッドを混同する 括弧が付くのがメソッド。箱か部品かの違い
点の数を数え違える 1つの点で1つ先。左から1つずつ区切る
[ ] と同じつもりで番号を入れる . は名前で指す。番号で指すのは [ ]

次に読む

この記事で引用した資料

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

シミュレータと練習問題は当サイトのオリジナルです。

Copied title and URL