ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Scalaコミュの簡潔なクラス定義のすがすがしさ

  • mixiチェック
  • このエントリーをはてなブックマークに追加
一昨日の豆ナイトScala&Lift特集 ご参加いただいた皆さんへ
あつく御礼申し上げます。

そしてうれしいことに参加していただいたSさんより
以下の新情報を教えていただきました。

=========
まず
class Person1(name:String, age:Int)

の場合は、もちろんインスタンス変数には
外部からアクセスできないので、通常は昨晩のお話のように

class Person2(na:String, ag:Int) {
def name = na
def age = ag
}

とすると思いますが。これを

class Person3(val name:String, val age:Int)
や
class Person4(var name:String, var age:Int)

の様に書くと、それぞれ自動的に

Person3 は getter が
Person4 は getter,setter が

定義されます!!

詳細はリファレンス(5.3 Class Definitions)の
If a formal parameter declaration x : T is preceded by a val or var keyword, an
accessor (getter) definition (§4.2) for this parameter is implicitly added to the
class.
にあります。

これを使うと昨日の資料冒頭のコードも

class Person(val lastName:String, val firstName:String, val spouse:Person) {
def this(ln:String, fn:String) = this(ln, fn, null)
def introduction = "私の名前は、" + firstName + " " + lastName +
(if (spouse != null) "、相方の名前は、" + spouse.firstName + " " + spouse.lastName + "。" else "。")
}

で良くなるので、実質4行(!!)です。

Sさん(+Mしまさん)、情報ありがとうございます。
これからもどんどん教えてください。

コメント(3)

おお!すごい。試しましたがほんまですな。

immutableとそうでないものも、明確かつ、短くコードできるのは嬉しいですね!
意味なくHaskellで書いてみました

scalaとhaskellのクラス定義
http://ujihisa.nowa.jp/entry/e2f59c6288
どう書く?.org(http://ja.doukaku.org/)みたいな展開ですな。
Scala投稿も眺めてみよっと。
にしても4行とは……

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Scala 更新情報

Scalaのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング