【スカラ】

Scala(スカラ) とは?

最終更新:
💡 関数型とオブジェクト指向を組み合わせる言語

関数型プログラミングとオブジェクト指向を組み合わせられる、静的型付けのプログラミング言語。JVM上でJavaのライブラリと連携でき、Scala.jsやScala NativeなどJVM以外の実行先もある。

📌 このページのポイント
関数型とオブジェクト指向を組み合わせる言語 関数型とオブジェクト指向を組み合わせる ƒ 関数型 関数を値として使う 🧩 オブジェクト指向 クラスなどで構成 Scala 静的型付け・型推論 ☕ JVM版 Javaのクラスやライブラリと連携 ほかの実行先:Scala.js / Scala Native 実行先やScala版に合うライブラリを選ぶ valの再代入禁止 ≠ オブジェクトの不変性
既存のScalaとJVMの位置関係を活かし、二つのプログラミングの考え方を組み合わせる構成へ整理。上の矢印は考え方の組合せ、下はJVM版の実行基盤との関係。JVM以外の実行先もあり、valだけで参照先が不変になるわけではない。
ひよこ ひよこ
ScalaはJVMで動くならJavaと同じ?
ペンギン先生 ペンギン先生
実行基盤を共有できるけれど、別の言語だよ。Scalaはクラスやオブジェクトに加えて、関数を値として渡す機能などを組み合わせる。JVM版ではJavaのクラスやライブラリと連携でき、必要に応じてコレクションなどを変換するんだ。
ひよこ ひよこ
関数型の書き方って?
ペンギン先生 ペンギン先生
関数を引数や戻り値にしたり、元のデータを変更せず新しい結果を作ったりするよ。一方でScalaは、変更できる変数やオブジェクトも使える。すべてのプログラムが自動的に純粋な関数型になるわけではないんだ。
ひよこ ひよこ
valで宣言すれば中身も変わらない?
ペンギン先生 ペンギン先生
valは、その名前への再代入を禁止するよ。参照しているオブジェクトまで必ず不変になる意味ではない。たとえばvalで持つ変更可能なSetには要素を追加できる。不変にしたいデータは、その型や操作も選ぶんだ。
ひよこ ひよこ
Sparkを使うならScalaが必須?
ペンギン先生 ペンギン先生
ScalaはSparkで使える言語の一つだけれど、PythonやJavaなどのAPIもあるよ。Scala APIを使う場合は、SparkがビルドされたScala版との対応を確認する。Scala 3ならすべてのSpark構成でそのまま動く、とは考えないんだ。
ひよこ ひよこ
JVM以外でも使えるの?
ペンギン先生 ペンギン先生
Scala.jsはJavaScript向け、Scala Nativeはネイティブ実行向けだよ。実行先によって使えるライブラリなどが異なる。Webやデータ処理などの用途で、言語の機能、対応環境、チームの経験を合わせて選ぶんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Scala」って出てきたら「関数型とオブジェクト指向を組み合わせる静的型付け言語」と思えばだいたいOK!
📖 おまけ:英語の意味
「Scala / scalable」 = 拡張できる言語
💬 Scalaという名前はscalable(規模を広げられる)に由来するよ。小さなコードから大きなシステムまで表現する言語という考え方で、使うだけで処理性能が自動的に伸びる保証ではないんだ。

参考資料

← 用語集にもどる