😝
ifとelseの両方でreturnすると損する…かも
当たり前ですが
コーディングにおいて大切なことは「正しく動くこと」と「読みやすいこと」です。
あと、「修正しやすいこと」とかも大切ですね。
それをふまえて
わかりやすい命名とか、適切な処理単位だとか、そのへんが最低限度文化的であれば、
あとは各々のポリシーに従って実装するべきです。
ただ、私はコミュ障で陰キャでオタクで普段あんまり喋らないので、
自分のポリシーを伝えて、相手に納得してもらうことはなかなか難しかったりします。
public class Hoge {
public func testMethod(flg: Bool) -> String {
if flg {
return "trueだよ"
} else {
return "falseだよ"
}
}
public func testMethod2(flg: Bool) -> String {
if flg {
return "trueだよ"
}
return "falseだよ"
}
public func testMethod3(flg: Bool) -> String {
guard flg else {
return "falseだよ"
}
return "trueだよ"
}
}
testMethod
、testMethod2
、testMethod3
はすべて同じ挙動です。
flg
が持つ意味や、メソッドの目的なんかを考慮して好きに実装していいと思います。
ただ、testMethod
の実装パターンを選択してしまうと、ほんの僅かに損するかもしれません。
損するってなんだ
testMethod
、testMethod2
、testMethod3
に対してユニットテストを実行します。
func testExample() throws {
let target = Hoge()
target.testMethod(flg: true)
target.testMethod(flg: false)
target.testMethod2(flg: true)
target.testMethod2(flg: false)
target.testMethod3(flg: true)
target.testMethod3(flg: false)
}
実行結果がこちら
なぜtestMethod
だけ、カバレッジ率が低いのかというと、
else節の終わり〜メソッドの終わり間の処理無し部分が実行されていないのです。バカバカしい。
if節とelse節の両方でreturnしちゃうと、カバレッジ100%マンに殴り勝てないこともあります。
(客観的数値は主観的ポリシーよりも、たいてい強いので…)
そのような意味で、ごくわずかに、損してしまう…かも😭
Discussion