Scala

目次
Scalaとは
Scala(スカラ)は、2003年にMartin Oderskyによって設計された、オブジェクト指向プログラミング(OOP)と関数型プログラミング(FP)を融合したプログラミング言語です。JVM(Java Virtual Machine)上で動作し、Javaのエコシステムと互換性を持ちながら、より簡潔で表現力のあるコードを書くことができます。
Scalaの特徴
Scalaは、以下のような特徴を持つプログラミング言語です。
- オブジェクト指向 + 関数型プログラミング: クラスベースのOOPと高階関数、イミュータビリティをサポート。
- 静的型付け: 強力な型推論と型安全性を提供。
- Javaとの互換性: Javaライブラリをそのまま利用可能。
- 簡潔な構文: ボイラープレートコードが少なく、短いコードで表現可能。
- 並行・並列処理のサポート: Akkaフレームワークを活用し、分散システムの開発が容易。
Scalaの基本構造
以下に、Scalaプログラムの基本的な構造を示します。
基本的なScalaプログラムの例
object HelloWorld {
def main(args: Array[String]): Unit = {
println("Hello, World!")
}
}
Scalaの基本構文
1. 変数とデータ型
Scalaでは、val
を使うと変更不可(不変)の変数、var
を使うと変更可能な変数を定義できます。
データ型の例
データ型 | 意味 | 例 |
---|---|---|
Int | 整数型 | val x: Int = 10 |
Double | 倍精度浮動小数点数型 | val pi: Double = 3.1415 |
String | 文字列型 | val name: String = "Taro" |
Boolean | 真偽値型 | val isActive: Boolean = true |
List | リスト型 | val numbers: List[Int] = List(1, 2, 3, 4, 5) |
2. 条件分岐(if文)
Scalaのif
文は式として扱うことができ、値を返すことができます。
val score = 80
val grade = if (score >= 90) "A" else if (score >= 70) "B" else "C"
println(grade) // 出力: B
3. 繰り返し処理(for, while ループ)
Scalaでは、for
やwhile
を利用できます。
for ループの例
for (i <- 1 to 5) {
println(s"i = $i")
}
while ループの例
var i = 0
while (i < 5) {
println(s"i = $i")
i += 1
}
4. 関数
Scalaでは、def
を使って関数を定義します。
def add(a: Int, b: Int): Int = {
a + b
}
println(add(3, 4)) // 出力: 7
5. 高階関数
関数を引数に取る、または関数を返す関数を「高階関数」と呼びます。
def applyTwice(f: Int => Int, x: Int): Int = f(f(x))
def double(x: Int): Int = x * 2
println(applyTwice(double, 3)) // 出力: 12
6. クラスとオブジェクト
Scalaはオブジェクト指向プログラミング(OOP)をサポートしており、クラスとオブジェクトを利用できます。
class Person(val name: String, val age: Int) {
def introduce(): Unit = {
println(s"私は $name です。年齢は $age 歳です。")
}
}
val p1 = new Person("山田 太郎", 25)
p1.introduce()
Scalaの用途
Scalaは、以下のような分野で広く利用されています。
- Web開発: Play Frameworkを使ったサーバーサイド開発。
- データ処理: Apache Sparkとの統合により、大規模データ処理が可能。
- 並行処理: Akkaを用いたマルチスレッドプログラミング。
- ファイナンス: 高速で型安全なコードを求める金融システムの開発。
Scalaのメリット
- Javaと互換性がある: Javaライブラリをそのまま使用できる。
- コードが簡潔: ボイラープレートコードが少なく、直感的な記述が可能。
- 並行処理に強い: 非同期プログラミングや並列処理が容易。
Scalaのデメリット
- 学習コストが高い: Javaに比べて構文が複雑で、関数型の概念を理解する必要がある。
- コンパイル速度が遅い: Javaと比較してコンパイル時間が長いことがある。
- エコシステムがJavaに比べて小さい: Javaのように標準的なライブラリが充実しているわけではない。
まとめ
Scalaは、オブジェクト指向と関数型プログラミングを統合した言語であり、特にデータ処理や並列処理が求められる分野での開発に適しています。Javaとの互換性を持ちながら、より簡潔なコードを書くことができるため、エンタープライズ開発にも適用されています。