📖

[Swift] プロパティにするかメソッドにするか

2021/07/29に公開

computed property とメソッド

computed propertyを書くべきか、引数を持たないメソッドを書くべきかで迷うときがあると思います。

var countOfSomething: Int {
   /* 何かしらの計算 */
   return hogehoge
}

// or 

func countOfSomething() -> Int {
   /* 何かしらの計算 */
   return hogehoge
}

個人的には以下のような条件を満たす場合にはプロパティを使っても良いと考えます。

値がインスタンスの状態または性質を表す

propertyの意味

propertyの名前にそぐわないものはプロパティにすべきではありません。
Bool.random()などがそれにあたります。

getterが副作用を持たない

getterは繰り返し実行してもよく、また連続した実行に対しては同じ値を返すべきです。

実行が失敗しないことが保証できる

例えば、getterで何らかの処理を行い、処理が実行不能あるいは失敗した場合にはnilを返す、といった場合はプロパティではなくメソッドを使用するべきでしょう。

O(1)あるいは十分に高速である

computed propertyはstored propertyと同じセマンティクスを持つべきであり、その実行はgetter、setter共に十分に高速であるべきです。この条件が満たせない場合はメソッドにするべきです。

setterを持つ

setterを持ち、かつgetterとsetterが完全に対応している場合はプロパティが適している可能性が高まるといえます。ただしsetterがあれば常にプロパティにするべきというわけではなく、上記の他の条件を満たしていなければメソッドの方が適している可能性が高いと言えます。

結論

ぶっちゃけ迷ったら全部メソッドでいいと思います。

Discussion