LoginSignup
0
0

More than 3 years have passed since last update.

kotlinのプロパティとカスタムアクセサ

Posted at

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にあたるメソッドの自動生成である。

プロパティの正体
https://sys1yagi.gitbooks.io/anatomy-kotlin/content/%E3%83%97%E3%83%AD%E3%83%91%E3%83%86%E3%82%A3%E3%81%AE%E6%AD%A3%E4%BD%93.html

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0