プログラム言語Scalaの特徴|科目A-1 令和7年 秋期午前試験 問7
出典:令和7年秋期 午前 問7
分野:アルゴリズムとプログラミング / プログラム言語
OSSとして公開されているプログラム言語であるScalaの特徴はどれか。
- ア:オブジェクト指向プログラミングと関数型プログラミングの両方が可能である。
- イ:クラスの多重継承が可能である。
- ウ:実行前にコンパイルして,ネイティブコードを生成する必要がある。
- エ:変数の型が,参照する実際の値によって実行時に決定される動的型付け言語である。
TSUNAGARU-ADVICE
まず押さえたいこと
Scalaは、Java仮想マシン上で動作することが多いプログラム言語で、オブジェクト指向と関数型の考え方を組み合わせて書ける点が特徴です。クラスやオブジェクトで構造化しつつ、関数を値のように扱う書き方もできます。マルチパラダイム言語として押さえましょう。
迷ったときの判断軸
Scalaは静的型付けの言語であり、実行時に型が決まる動的型付け言語ではありません。また、JVM上で動作することが多いため、必ずネイティブコードを生成するという説明も不適切です。多重継承については、クラスを複数継承するというより、トレイトを組み合わせる仕組みで理解すると混同を避けやすくなります。
科目Bにつなげるために
特にプロフェッショナルデジタルスキル(システム)試験合格を目指す方は、言語の特徴を丸暗記するだけでなく、型付け・実行環境・オブジェクト指向・関数型といった開発スタイルの違いを設計・実装の選択肢として理解しておくと、科目Bの開発技術やアーキテクチャの問題につながります。
Scalaは、オブジェクト指向と関数型プログラミングの両方の考え方を使えるプログラミング言語です。
オブジェクト指向とは、データや処理を「オブジェクト」としてまとめて扱う考え方です。一方、関数型プログラミングは、データを関数で変換していく考え方です。Scalaでは、この2つを組み合わせてプログラムを書くことができます。
たとえば、次のコードでは、リストの数値を2倍にし、その中から10以上の値だけを取り出しています。
object HelloScala { def main(args: Array[String]): Unit = { val scores = List(3, 5, 8, 10) val doubled = scores.map(score => score * 2) val highScores = doubled.filter(score => score >= 10) println("元のリスト: " + scores) println("2倍にしたリスト: " + doubled) println("10以上の値: " + highScores) } }mapは、リストの各要素に同じ処理を行うために使います。この例では、各数値を2倍にしています。
filterは、条件に合う要素だけを取り出すために使います。この例では、2倍にした後の値のうち、10以上のものだけを取り出しています。
つまりScalaは、「Javaとの互換性を持ちながら、オブジェクト指向と関数型の書き方を組み合わせられる言語」と考えると分かりやすいです。
したがって、アが適切です。
❌他選択肢が誤りの理由イ:クラスの多重継承が可能である。
⇒Scalaでは、クラスの多重継承はできません。ただし、traitを使うことで、複数の機能をクラスに組み込むことはできます。クラスそのものを複数継承できるわけではない点に注意が必要です。
ウ:実行前にコンパイルして,ネイティブコードを生成する必要がある。
⇒Scalaは通常、JVM上で動作するバイトコードにコンパイルされます。実行前に必ずネイティブコードを生成する言語ではありません。
エ:変数の型が,参照する実際の値によって実行時に決定される動的型付け言語である。
⇒Scalaは静的型付け言語です。型推論によって型を明示しなくてもよい場合はありますが、型は基本的にコンパイル時に決まります。実行時に型が決定される動的型付け言語ではありません。