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

基本情報技術者試験

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

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

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

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

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

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

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

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

Seito: seito

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つ取り出す」点は同じです。同じものが並んでいて番号で呼ぶのが配列、違うものが入っていて名前で呼ぶのがメンバ変数だと考えてください。

k は、メンバ変数 kokugo と sansu を持っています。k.kokugo が 70、k.sansu が 50 のとき、次の2行を実行すると何が出力されますか。

k.sansu ← k.kokugo + 5
k.sansu を出力する

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

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

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

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

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

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

この問題では、先頭の要素を指す変数が listHead です。型は ListElement なので、listHead の中には val と next の2つが入っている、と読めます。そして next の型が ListElement 自身になっているのがポイントです。メンバ変数 next が、また同じ ListElement の要素を指しているわけです。

表の next の説明は「次の要素の参照」です。問題文も「ListElement 型の変数はクラスListElement のインスタンスの参照を格納するものとする」と断っています。

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

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

この表さえあれば読める

listHead.val先頭の要素の値

listHead.next次の要素(を指す参照)

listHead.next.val次の要素の値

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

要素が1列に並んだリストです。1つの要素は2つのものを持ちます ── val(その要素の値)と next(次の要素の参照)。
先頭から "A"、"B"、"C"、"D" と並んでいて、listHead は先頭の要素を指しています。"D" を取り出す書き方はどれですか。

メソッド ── 中に入っている手続や関数

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

出典:基本情報技術者試験 科目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 の中には、count(回数)と reset(count を 0 に戻す)があります。b.count が 7 のとき、次の2行を実行すると、n はいくつになりますか。

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

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

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

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

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

つながった . を読む手順

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

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

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

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

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


ループ開始前

配列

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

いま計算していること

まだ計算していません

変数の状態

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

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

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

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

つまずきポイントまとめ

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

次に読む

この記事で引用した資料

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

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

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