はじめに
こんにちは@kaneko77です。
getter
とsetter
についてたまにわかりずらいなと思ってしまう時があった為
調べ直したものをまとめたいと思います。
getterとsetterについて
この二つを説明するにあたって計算型プロパティ
という物を説明する必要があります。
計算型プロパティとは 値の参照と更新の機能を手続きで構成するプロパティになります。
そして計算型プロパティにはget節とset節というものがありそちらが今回のgetterとsetterになるということです。
get節がgetter
でset節がsetter
です。
計算型プロパティは、値の更新と参照ができるパターンと参照だけできるパターンがの2種類があるということも知って置いてください。
結局のところ、参照した結果の値を計算するのがget節
で、指定された値を使ってプロパティを表す値を更新する部分がset節
になるということです。
上記のまとめ
get節
: 参照した結果の値を計算する
set節
: 指定された値を使ってプロパティを表す値を更新する
getter
: どういう風に値を取得するのか
setter
: 値を代入した場合の動き
get節のみの定義でもできる
説明
基本
以下が計算型プロパティのゲッタとセッタを基本の形でコードを現した物になります。。
var プロパティ名: 型 {
get{
....
}
set(仮引数){
....
}
}
仮引数の省略
仮引数は省略可能でその場合は値の取得はnewValue
という変数が使えます。
var プロパティ名: 型 {
get{
....
}
set{
return newValue
}
}
returnの省略
関数と同じなのでreturn
は省略できます。
var プロパティ名: 型 {
get{
....
}
set{
newValue
}
}
setの省略
プロパティの値を参照するときだけの場合はsetが必要ない為、省略できます。
var プロパティ名: 型 {
get{
....
}
}
get
のみの場合さらに省略することができます。
以下もゲッタを使ってるのと同じです。
get
自体を省略できます。
var プロパティ名: 型 {
....
}
具体的な利用シーン
それでは書き方として色んな書き方や概念がわかってきたと思うので続いて
じゃー具体的にどういう時に使われるのかというお話になります。
以下がよく使われる例
- 税込み価格・税抜き価格取得したい時
- 入力文字を全部大文字にしたい時
etc..
それでは上記二つを例としてコードで書いてみます。
税込み価格・税抜き価格取得したい時
今は税金10%の時代なので1.10でやります。
var price: Double = 100
var tax: Double {
get{
price * 1.10
}
set{
price = newValue / 1.10
}
}
price = 1000
// 税込み価格を取得
print(tax) // 1100.0
tax = 1100
// 税抜き価格を取得
print(price) // 999
入力文字を全部大文字にしたい時
var inputValue = "test"
var uppercaseValue: String {
get { inputValue }
set { inputValue = newValue.uppercased() }
}
uppercaseValue = "hogehoge"
print(uppercaseValue) // HOGEHOGE
#終わりに
今回はgetter
とsetter
について共有しました。
プロパティのメリットは外部から参照した時に意図しない変更を加えられなくするところだと思います。
getter
は対象の値を書き換えたくない時などに使えると思います。
setter
は何か付け加えた時、例えば名前の先頭文字に全部mr.
とかつけたいなど要は値の加工ですねに使えると思います。
慣れれば割といろんなところに使えると思います。
ここまで読んでいただきありがとうございます。
参考にしたサイト
https://qiita.com/nack43/items/5e1d7972ed0b54daeb04
https://www.hfoasi8fje3.work/entry/2018/05/07/002215