kotlinは、プロパティという仕組みによって、メソッドによるアクセサ(いわゆるgetterやsetter)の記述を省略できる。
一方で、アクセサを省略せずに記述することも可能である。これをカスタムアクセサという。
カスタムアクセサを使う場面を調べてみた。
#1.kotlinでカスタムアクセサを使う場面
単純に、変数に値を設定する場合、もしくは変数の値を取得する場合には、アクセサの記載は不要である。
そのままプロパティを利用すればよい。
条件つけて変数の値を取得したい場合、もしくは、条件をつけて変数に値を設定したい場合に、カスタムアクセサが必要になる。
カスタムアクセサにその条件を記述する。
以下は、カスタムアクセサの利用例だが、単純に変数の値を設定、取得するのではなく、取得、設定する際にString形式に変換しようとしている。
var stringRepresentation: String
get() = this.toString()
set(value) {
setDataFromString(value) // 文字列をパースして他のプロパティへ値を代入する
}
Kotlinリファレンス プロパティとフィールド
https://dogwood008.github.io/kotlin-web-site-ja/docs/reference/properties.html
#2.補足
###2.1.getter/setterとは
#####2.1.1.getter/setterの仕組み
「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典「setter」
https://wa3.i-3-i.info/word15855.html
#####2.1.2.getter/setterのメリット・デメリット
Javaにおけるgetter/setterは必要性とは?オブジェクト指向プログラミング言語の動向
https://geechs-magazine.com/tag/tech/20170215_2
###2.2.プロパティ
#####2.2.1.プロパティの登場
getter/setterとはなんだったのか
https://nagise.hatenablog.jp/entry/20141010/1412930502
######2.2.2.kotlinのプロパティ
kotlinでプロパティを利用すると、getter/setterのようなメソッドのアクセサが記述が省略できる。
クラス内で定義された変数(以下の例ではresult.name)に対して値を設定したい場合、次のようにおこなう。
public class Address {
public var name: String = ...
}
fun copyAddress(address: Address): Address {
val result = Address() // 'new' キーワードは Kotlin にありません
result.name = address.name // プロパティの利用。
// ...
return result
}
######2.2.3.kotlinのプロパティの中身
プロパティを利用するとkotlinにメソッドによるアクセサがなくったようにも思えるが、処理の中身はそうではない。
プロパティとはgetter/setterにあたるメソッドの自動生成である。