Statistical Programming

JavaとScalaの違いその6 ... Setter & Getter

Scalaにはstaticキーワード自体が存在しません(その代わりcase classというより便利なクラスは存在しますが)。

ですのでclassは基本的にインスタンス化しなくては使えません(case class以外)。

Javaではクラスは設計図だからインスタンスしてねーとかいっときながらstaticで使えるというダブルスタンダードだったのですがそれが改善されています。

その代わりobjectとして定義してあるものはstaticのような感覚で使うことができます。

 

import java.io._

import java.util._

object UseEx extends App{

  ThrowEx.exex

}

object ThrowEx{

def exex{

 var sc=new Scanner(System.in)

try{

 println(sc.nextInt())

}catch{

 case ex:InputMismatchException=>println("You are dealing with in exceptional way!!")

}finally{

 

}

 

}

}

 

 

Javaでは、ん??って思ってたとこが改善されてるのでなんかうれしいです、Scala。

次にsetter/getterについてです。

 

Javaではsetter/getterともにフィールドとは別に書かなければなりませんでした。

フィールドはprivateにして〜メソッドはpublic〜と一つ一つのフィールドに対してしていくわけです(もちろんツールは存在しますが)。

ですがScalaではそれらの処理を内部で行ってくれます。ですのでフィールドだけ作成すれば自動的にsetter/getterが作成されるのです!!

 

class Data {

var id=0

var name=""

}

object GetData extends App{

  //インスタンス作成

  var d1=new Data()

  //setter

  d1.id=1

  d1.name="Tanaka"

  //getter

  println(d1.id)

  println(d1.name)

 

 

ぱっとみでは単純にフィールドにアクセスしているように見えるのですが、

内部のイメージとしてはこんな感じです。順に、id getter, id setter, name getter, name setter

となっています。

def id={id}

def id_=(arg:Int):Unit={id=arg}

def name={name}

def name_=(arg:Int):Unit={id=arg}

 

 

助かりますね^^