Swiftには、自身が値をもたず、構造体の他のプロパティにアクセスして、値をセットしたり値を取得する計算型プロパティが存在します。
この記事では、筆者が疑問に感じた
- 計算型プロパティって何?
- 計算型プロパティはどうやって使うの?
をもとに計算型プロパティに対する個人的な理解をゼロからまとめてみました。
ぜひ、参考にしてみてください!
計算型プロパティ(Computed Properties)とは
計算型プロパティ (Computed Properties)は、構造体・クラス・列挙型で定義されるプロパティの一つです。
このプロパティは、他のプロパティにアクセスできる代わりに、自身に値を持ちません。
計算型プロパティは、他のプロパティの値や他のプロパティの値の計算値をセットしたり、値を取得することができます。
まず、プロパティというのは構造体やクラスなどの変数や定数のことを指します。
プロパティは大きく以下の2つに分類されます。
- 格納型プロパティ
- 計算型プロパティ
格納型プロパティ(Stored Properties)
格納型プロパティは、プロパティそのものが値を保持し、メモリに格納される変数です。
struct Price {
var JPY: Double // 格納型プロパティ
var tax_rate: Double // 格納型プロパティ
}
計算型プロパティ(Computed Properties)
一方、計算型プロパティは、自身が値を保持しないプロパティです。
その代わり、構造体やクラスなどの他のプロパティを参照することができます。
言葉通り、値をセットしたり取得したりするために計算を行います。
計算型プロパティには、他のプロパティを参照して値を計算を行うget
と値を取得して計算を行うset
が存在します。
struct Price {
var JPY: Double
var tax_rate: Double
var taxIncluded: Double { // 計算型プロパティ
get {
return JPY * tax_rate
}
set {
JPY = newValue / tax_rate
}
}
}
var price: Price = Price(JPY: 100, tax_rate: 1.1)
price.taxIncluded // getのブロックコードが実行される
price.taxIncluded = 220 // 値がnewValueに格納され、setのブロックコードが実行される
この例では、Priceタイプの変数price
がJPY = 100
, tax_rate = 1.1
で初期化されています。
price.taxIncluded
が実行される時は、get
のブロックコードが実行されます。
price.taxIncluded = 220
が実行される時は、set
のブロックコードが実行されます。newValue
に値220
がセットされた後、JPY = newValue / tax_rate
が実行されます。
値を保持しない変数って面白い🤔
計算型プロパティはgetとsetで2通りの使い方ができるのか
計算型プロパティの応用的な使い方
計算型プロパティで値をセットする時は、デフォルトのnewValueを使わない方法もあります。
struct Price {
var JPY: Double
var tax_rate: Double
var taxIncluded: Double {
get {
return JPY * tax_rate
}
set(value) { // 引数に使いたい引数名を指定する
JPY = value / tax_rate
}
}
}
var price: Price = Price(JPY: 100, tax_rate: 1.1)
price.taxIncluded
price.taxIncluded = 220
set
には、newValue
がデフォルトで使用されますが、引数を指定することで使いたい引数名でブロックコードの処理を記述することができます。
まとめ
この記事では、計算型プロパティ(Computed Properties)について解説しました。
- 構造体やクラスなどの変数や定数はプロパティと呼ばれる
- プロパティには格納型プロパティ(Stored Properties)と計算型プロパティ(Computed Properties)がある
- 計算型プロパティは、自身が値をもたないプロパティ
- 計算型プロパティを使うことで、他のプロパティを参照して値を計算したり、値を取得して計算したりできる