オペランドの原則とSwift
オペランドの原則というものを学んだので書いていきます。
オペランドの原則とは
オペランドの原則とは簡単に言うと「メソッドの引数にオプション的な値を入れない」という原則です。
下のようにテキストから文字列を検索するクラスを考えると、ignoreCase
はオプション的な値になります。
オペランドの原則の法則に従うと、ignoreCase
はserarch
の引数にせずインスタンス変数にする事になります。
class TextSearchManager { let text: String init(text: String) { self.text = text } func search(str: String, ignoreCase: Bool) -> [String] { // ... } }
オペランドの原則の語源
オプション引数以外の引数をオペランド引数と呼びます。
オペランドの原則はそこから来ています。
オペランドの原則のメリット
オペランドの原則のメリットとしては下のものが挙げられます。
- 引数が少ないので使う側が混乱しない
- オプションを増やしたい時に他のクラスへの影響が少ない
しかしSwiftには「デフォルト引数を備えている」「最後の引数以外も省略できる」という性質があるので上記のメリットはSwiftでは感じる事がないかもしれません。
class TextSearchManager { let text: String init(text: String) { self.text = text } func search(str: String, ignoreCase: Bool = false, onlyFirst: Bool = false) -> [String] { // ... return [String]() } } let t = TextSearchManager("text") t.search("str", onlyFirst = true)
Swiftでオペランドの原則に従うべきか
個人的にはオペランドの原則の法則に従って行きたいと思っています。
というのも引数を省略できるとは言え、メソッド定義に何個も引数があるのは見栄え的に重いです。
大量のオプション付きでメソッドを呼び出す時に処理が長くなってしまうのも少しイマイチな気がしています。
コンストラクタのオプション引数
コンストラクタについてはオプション引数を付けるのはありのようです。
完全コンストラクタを使えるので、コンストラクタでの指定は良さそうです。
参考URL
オペランドの原則 - Strategic Choice
メソッドの引数はオペランドのみにする原則(メソッドの引数がクラス設計に影響する) - A Day In The Life