AUシステム監査技術者試験 午前Ⅰ

令和2年度10月 システム監査技術者 午前Ⅰ 問3

問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。

問題

オブジェクト指向のプログラム言語であり,クラスや関数,条件文などのコードブロックの範囲はインデントの深さによって指定する仕様であるものはどれか。

選択肢

  1. ア
    JavaScript
  2. イ
    Perl
  3. ウ
    Python
  4. エ
    Ruby
解き方のヒントを見る

言語の設計思想から特徴を捉える

プログラム言語を識別するときは、個々の用語の暗記に頼るより、示された特徴がその言語のどんな設計上の目的から生まれたのかという一つの観点に絞って整理すると、判断の根拠が明確になります。

この問題で問われていること

問われているのは、提示された記述が言語のどの性質(書き方の規則なのか、処理の組み立て方の考え方なのか)を指しているかを見極め、それを言語の成り立ちや用途と結び付けて判断できるかどうかです。

視点

プログラム言語には、それぞれ生まれた背景と解決しようとした課題があります。ある特徴は単独で覚えるより、「なぜその言語にその性質が必要だったのか」という設計上の目的と結び付けて理解すると、似た記述が並んでいても区別しやすくなります。特徴そのものの言葉の印象ではなく、その特徴が支えている目的を手掛かりに考える姿勢が大切です。

確認ポイント

  • 示された記述が、書き方の規則と処理の考え方のどちらについて述べているかを自分の言葉で言い換えられるか
  • その特徴がどのような課題や目的を解決するために必要とされたのかを説明できるか
  • 特徴と言語の結び付きを、用語の印象ではなく設計上の目的という根拠で説明できるか
正解と解説を見る

正解

ウ

解説

正答はウのPythonです。Pythonはクラスを定義できるオブジェクト指向言語で、class・def・ifなどの行末にコロンを書き、続く行をどれだけ字下げするかでブロックの範囲を決めます。JavaScriptとPerlは波括弧{ }で、Rubyはendなどのキーワードで範囲を示すので、インデントは習慣にすぎません。

理由

Pythonでは、class・def・if・forなどの行をコロン「:」で終え、次の行から同じ深さで字下げした部分が一つのブロックになります。字下げを戻すとブロックが終わり、深さがそろっていないとIndentationErrorになります。つまりインデントの深さが文法として範囲を決めているので、問題文の条件に合うのはウのPythonです。

比較

JavaScriptとPerlは、関数や条件文のブロックを波括弧{ }で囲みます。Rubyはclass・def・ifなどのブロックをendで閉じます(do…endや{ }も使います)。この三つの言語でも字下げは読みやすさのために使われますが、深さを変えてもブロックの範囲は変わりません。そのため、オブジェクト指向で書ける点は共通していても、「インデントの深さによって指定する仕様」には当てはまりません。

選択肢ア

これは不正解だよ。JavaScriptはプロトタイプベースのオブジェクト指向言語で、ES2015からはclass構文も使えるよ。でも、関数や条件文のブロックは波括弧{ }で囲んで範囲を示すんだ。インデントは読みやすさのための習慣だから、深さを変えても文法上のブロック範囲は変わらない。だから問題の仕様には当てはまらないよ。

選択肢イ

これは不正解だよ。Perlはテキスト処理でよく使われてきた言語で、パッケージとblessを使ったオブジェクト指向にも対応しているよ。でも、subで定義する関数やif文などのブロックは波括弧{ }で囲むのが文法上の決まりなんだ。インデントの深さでは範囲が決まらないから、問題の条件と合わないよ。

選択肢ウ(正解)

これは正解だよ。Pythonはclassでクラスを定義できるオブジェクト指向言語だよ。class・def・ifなどの行末にコロンを書いて、続く行を同じ深さで字下げした部分が一つのブロックになるんだ。字下げを戻すとブロックが終わるし、深さがずれるとIndentationErrorになる。インデントが文法そのものだから、問題文の条件にぴったり合うね。

選択肢エ

これは不正解だよ。Rubyは数値や文字列までオブジェクトとして扱う、オブジェクト指向の性格が強い言語だよ。でも、class・def・ifなどのブロックはendというキーワードで終わりを示すんだ(do…endや{ }も使うよ)。インデントは習慣だから深さを変えても範囲は変わらず、問題の条件には当てはまらないよ。

学習のポイント

ブロックの示し方には、波括弧で囲む方式、endなどのキーワードで閉じる方式、インデントの深さで決める方式があります。代表的な言語がどの方式を使うかを結び付けて覚えましょう。

出典:独立行政法人 情報処理推進機構(IPA)令和2年度10月 システム監査技術者試験 午前Ⅰ 問3(公式資料:問題冊子(PDF) / 解答例)

関連する過去問一覧

IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針