🐥

【Swift】計算型プロパティってなに?

2023/03/31に公開

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のブロックコードが実行される

計算型プロパティの応用的な使い方

計算型プロパティで値をセットする時は、デフォルトの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

引数を指定することで使いたい引数名でブロックコードの処理を記述することができます。

まとめ

  • 構造体やクラスなどの変数や定数はプロパティと呼ばれる
  • プロパティには格納型プロパティ(Stored Properties)と計算型プロパティ(Computed Properties)がある
  • 計算型プロパティは、自身が値をもたないプロパティ
  • 計算型プロパティを使うことで、他のプロパティを参照して値を計算したり、値を取得して計算したりできる

Discussion