Javaと同様、Scalaの場合もプログラミングはクラスからです。その使い方から見ていきましょう。第1回の開発環境の整備で紹介した「IntelliJ IDEA」でコードを動かしながら読み進めてください。

クラスとフィールドを宣言する

 早速クラスを使ってみましょう。今回はお金を表すMoneyクラスを例に取り、クラスの使い方を学びます。

リスト1●Moneyクラス
リスト1●Moneyクラス
[画像のクリックで拡大表示]
リスト2●Moneyクラス(省略しないで書いたもの)
リスト2●Moneyクラス(省略しないで書いたもの)
[画像のクリックで拡大表示]
リスト3●100円を表すコード
リスト3●100円を表すコード
[画像のクリックで拡大表示]

 まず、リスト1のようにMoneyクラスを宣言します。前述したように、クラス宣言のデフォルト(既定)のアクセス修飾子はpublicです。Javaだと同一パッケージ内からしかアクセスできないパッケージプライベートですが、Scalaでは何も記述しなければpublicです。

 Moneyクラスには、二つの属性があります*1。金額の量を表すBigDecimal型のamountと、円やドルなどそのお金の単位(通貨単位)を表すCurrency型のcurrencyです*2

 この説明だけでは、理解しにくいと思うので、段階を追って解説しましょう。リスト1のコードを省略しないで記述したのがリスト2です。Scalaでは、クラス名の後ろにコンストラクタの引数の仕様を記述し、(1)のブロックがコンストラクタの処理ブロックとなります。このコンストラクタを基本コンストラクタ(primary constructor)と呼びます。また、このブロックはフィールド宣言のブロックでもあります。この例では、コンストラクタの引数からvalフィールドに代入しています*3。つまり、クラス宣言部とコンストラクタ宣言部をまとめて記述することで、簡潔で明瞭なコードを書けるわけです。

 さらに、コンストラクタの引数とフィールドは一対一対応しているので、このような記述も冗長です。この冗長さを取り除いて書いたのが、リスト1です。とても簡潔に、たった1行でクラスを定義できるわけです。このクラスを利用して、100円を表すコードを書くとリスト3のようになります。