プログラムの中に listHead.next や prioQueue.size() のような、点でつながれた書き方が出てくることがあります。見慣れないと身構えますが、読み方はひとつだけです。. は「〜の中の」と読みます。
期間限定クーポンPR|Udemy の講座科目B オリジナル模試 3回分・60問42%OFF 1,500円この回の内容を動画で見る
次のページで講義の目次と無料の講義を見られます。受講ボタンとクーポンコードもそこにあります。
この回の内容を動画で見る
解くための再現性が身につく講義29本小テスト86問模試3回分IT資格の森で見る
講義「クラスとインスタンス」(全7分40秒)は、IT資格の森(月額1,280円)の会員向けです。科目Bは、1行ずつ値を追うアニメの講義と、講義ごとの小テスト、本番と同じ形の模擬試験がそろっています。
なぜ、箱の中に箱を入れるのか
生徒1人ぶんのデータを持ちたいとします。名前と点数の2つです。ここまでの書き方だと、こうなります。
文字列型: namae ← "田中" 整数型: ten ← 80
2人めが出てくると namae2、ten2 と増えていきます。しかもどの名前とどの点数が同じ人のものかは、名前の付け方で察するしかありません。
そこで、1人ぶんをひとまとめにして、1つの名前で持ちます。
Seito: seito
seito には田中さんのデータが入っているとします。コロンの前の Seito は、この例のために用意された型です(こういう型をクラスといいます。次回扱います)。seito のデータは1つのまとまりで、その中に namae と ten という名前の付いた変数がある ── そういう形です。
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先頭の要素の値
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
つながった . を読む手順
- いちばん左の名前を見る。それが出発点
- 最初の
.の右を取り出す。ここで「別のもの」に移っている - 次の
.の右を、いま移ったものの中から取り出す - 点の数だけ繰り返す。
.next1つで、1つ先の要素へ進む
途中で戻ることはありません。左から右へ、一方通行です。
1行ずつ動かして確かめます。prev がリストの上を1つずつ進んでいくところを見てください。
点をたどると、1つずつ先へ進む
当サイトオリジナルの例題
ループ開始前
配列
いま計算していること
変数の状態
出力
トレース表(進めると1行ずつ積み上がります)
サンプル問題 問10 は、単方向リストから要素を1つ削除する手続です。空欄に入るのは prev.next.next(正解はカ)。
prev.next は消したい要素、prev.next.next はその次の要素。消したい要素を飛ばして、その次につなぎ替えるので、点が2つ要ります。点の数を1つ間違えるだけで、別の答えになります。
つまずきポイントまとめ
| まちがえ方 | 正しい理解 |
|---|---|
. を名前の一部だと思う |
演算子。優先順位はいちばん高い |
| メンバ変数の意味を覚えようとする | 実際の出題では必ず表で与えられる。見ながら読む |
| メンバ変数とメソッドを混同する | 括弧が付くのがメソッド。変数か、手続や関数かの違い |
| 点の数を数え違える | .next 1つで1つ先。左から1つずつ区切る |
[ ] と同じつもりで番号を入れる |
. は名前で指す。番号で指すのは [ ] |
次に読む
この記事で引用した資料
- 擬似言語の記述形式 IPAが公開している科目Bの公開問題・サンプル問題(PDF)の冒頭に掲載。名称は年度により「基本情報技術者試験用」と「基本情報技術者試験,応用情報技術者試験用」があるが、本文は同一
- 基本情報技術者試験 科目B サンプル問題(2022年12月26日公開)
いずれも独立行政法人情報処理推進機構(IPA)が公表したものです。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では、引用した箇所の文言を改変していません(省略や補いがある場合は、その場に明記しています)。
シミュレータと練習問題は当サイトのオリジナルです。


