chofutaroメモ

ソフトウェアエンジニアによるソフトウェアエンジニアのためのメモ書き

setterの書き方ではまりました

Scalaのプロパティ構文、特にsetterの書き方ではまりました。

Javaは使いたいけどプロパティ構文が使えないことと、最近よく効く関数型プログラミング言語に興味があってScalaを勉強し始めました。当然のごとく、プロパティ構文を確認することから始めたのですが、いきなりsetterの書き方で躓いてしまいました。

プロパティ構文*1setterの書き方

以下のようにコーディングではエラー*2になります。A Scala Tutorialのコード例をそのままタイプしたつもりなのですがコンパイルエラーです。

class Employee {
  private var name_ :String = _
  def name: String = name_  
  def name _= (aName: String) {
    name_ = aName
  }
}

keisukenのたわ言で教えてもらったのですが、setterはメンバ変数名に"_="を付けた名前になるそうです。”name_=”が名称ということでしょうか。

修正結果は以下の通りです。

  def name_= (aName: String) {  // nameと_=の間の空白を削除した。

ちなみに、Scalaのプロパティ構文ではgetter必須で省略できないようです。

Scalaでは'_'(アンダースコア)を使うと'+'という文字が使える

私の手元にある入門書にはエラーの原因を探る情報がなかったため、少しネットを調べ回ったところ、おもしろい文法を見つけることができました。それは、Scalaはアンダースコア('_')を使えば'+'等演算子に使う文字が使えるという点です。

例えば、

private var t_++= = 1;

のように、"t_++"という変数名が使えるんですね。

*1:Scalaでは統一アクセスとか統一アクセスの原則というらしい。

*2:eclipse上では"no value: value aName”