#13 Scalaで学ぶクラスの基本

Scalaのクラスは、Javaと似た書き方に加え、case classという非常に便利な仕組みが用意されています。この記事では、Scalaにおけるクラスの基本と、パターンマッチングとの組み合わせを解説します。

クラスを作ってみる

class Person(val name: String) {
    def greet(): Unit = {
        println(s"こんにちは、$name です")
    }
}

Kotlinと同じく、クラス名の後ろのかっこにプロパティを書くだけで初期化を済ませられます。

クラスからインスタンスを作る

val person = new Person("太郎")
person.greet() // こんにちは、太郎です

case classという便利な仕組み

単純にデータを保持するクラスには、case classを使うと、比較や表示のための機能が自動的に用意されます。

case class Person(name: String, age: Int)

val a = Person("太郎", 20) // newが不要になる
val b = Person("太郎", 20)
println(a == b) // true(中身が同じなら等しいと判定される)
println(a)      // Person(太郎,20)

パターンマッチングと組み合わせる

case classは、以前の記事で触れたmatchによるパターンマッチングと相性よく設計されています。

def describe(p: Person): String = p match {
    case Person(name, age) if age >= 20 => s"$name さんは成人です"
    case Person(name, _) => s"$name さんは未成年です"
}

println(describe(a))

case classのフィールドを、matchの中で直接name・ageのような変数として取り出せるのが便利な点です。

Scalaならではの注意点

case classはKotlinのdata classに似た機能ですが、Scalaの関数型プログラミングとの相性を考えて設計されており、パターンマッチング(以前の記事で触れたmatch)と組み合わせて使われることが多いのが特徴です。データを表すクラスを作る際は、まずcase classで表現できないかを検討するのがScalaらしい設計の第一歩です。

まとめ

Scalaのクラスはclassが基本ですが、データ中心のクラスにはcase classが便利です。等価比較の自動生成や、matchとの組み合わせも意識しておきましょう。


本ページはプロモーションを含みます。

参考書籍(PR)

Scalaをもっと学びたい方には「実践Scala入門」がおすすめです。


PR

コードを書かずに自動化したい方へ

「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。

コメント

このブログの人気の投稿

#25 Rustで学ぶAI API(ChatGPT等)の呼び出し方の基本

#8 C++で学ぶ文字列操作の基本

#16 TypeScriptで学ぶ辞書型(マップ)の基本