Swiftで、"右辺値がnil
でなければ左辺値に代入したい"ということがありました。
これを素直に書くと以下のようなコードになると思います。
if let value = value {
self.value = value
}
うーん、なんだかイケてない感じがします。
数が多くなってくると結構面倒ですし、読みにくくもなってしまいます。
そこで、"右辺値がnil
でなければ左辺値に代入する"演算子?=
を定義してみます。
infix operator ?= {}
func ?= <T> (inout lhs: T, rhs: T?) -> Void {
if let rhs = rhs {
lhs = rhs
}
}
これで最初のコードは以下のように簡潔に書けます。
self.value ?= value
敢えて名前をつけるとOptional Assignment Operator
といったところでしょうか。
Swiftでは自由度の高い演算子定義や後置クロージャのおかげで、マクロなどを使うことなく安全かつ柔軟に記法を拡張して、イカした感じの記述ができるので良いですね。
無論乱用すると良くないかも知れませんが、適切に使えば利得は大きいのではないかと思います。
それでは、皆さんも用法用量を守って演算子を定義し、快適なSwiftライフを!