はじめに
??
オペレータをむやみに使うとデバッグ段階で気づくべきバグに気付けなくなる可能性があるので,下記の記事で述べられていることは有意義に感じた.
しかし,毎回下記の記事に書いてあるように記述するのも大変そうなので,簡単に扱えるカスタムオペレータを作ってみた.
安易な気持ちで
as? Int ?? 0
みたいなコードを書いてはいけません(戒め
https://qiita.com/lovee/items/a82087f8c3663f207c7f
作ったカスタムオペレータ !?
二項演算子で表現した.
エラー文は関西人風味でお届け.これでバグを出ても決して苛立つ事は無くなるので一石二鳥である.ぜひ採用してみてほしい.
infix operator !?
func !?<T>(lhs: T?, rhs: T) -> T {
return lhs ?? {
assertionFailure("って,アンラップ出来んやないか~~~~い😂")
return rhs
}()
}
let text: String? = nil
// デバッグ環境ならエラー, プロダクション環境なら"hello world"が返却されます
print(text !? "hello world")
感想
プログラマが真にnil許容を許容している場合は??
を,コンパイラに翻弄されてしまっている場合は!?
を使う,といったような使い分けが出来ると良いと思った.