Swift の比較演算で ≥ や ≠ を使えるようにする。
Swift プログラミング
Swift では識別子に Unicode 文字が使えるようになったのに、大小関係を比較する演算子が「>=」とかのままだったので、演算子「≥」で比較できるようにしてみました。
演算子の定義にUnicode 文字を使用する
Swift言語 では、変数名や関数名などの識別子にUnicode 文字を使えるようになりました。
もったいないなと思うのは、文字としてせっかくUnicode が使えるようになったのに、Swift言語 言語の生みの親である Apple さえ『変数名に絵文字』を推すばかりで、結局は従来通りの名前のつけ方で終わってしまっています。
たとえば、左の値が右の値以下を比較するのに使う演算子は<=
ですよね。
Swift言語 ではカスタム演算子を定義できるようになっているので、これを使って≤演算子 で比較できるようにしてみたいと思います。
比較できる値
Swift言語 では、大小関係を比較できる値は全てComparableプロトコル に準拠しています。これを対象にした≤演算子 をひとつ実装すれば、すべての値で大小関係を比較できます。
比較演算子を定義する
<=演算子 と同等の機能を≤演算子 で実装する
左の値が右の値と同じかそれより小さいかを判定する演算子「≤」の定義は次のようになります。
infix operator ≤ { associativity none precedence 130 }
public func ≤ <T : Comparable>(lhs: T, rhs:T) -> Bool {
return lhs <= rhs
}
受け取るふたつの引数の指定はジェネリックを使っているので、両方が同じ型で、かつ、その型がComparableプロトコル に準拠さえしていれば、どんな型でも受け取れます。
また、今回は標準の「<=」と同等の演算子を作りたいので、演算子の優先順位は標準と同じassociativity none
とprecedence 130
を指定しています。
これで、次のように値の大小関係を比較できます。
if value1 ≤ value2 {
}
ちなみに「≤」の記号は、日本語キーボードや英語キーボードなら
キーで入力できます。ちょうど が印字されているキーです。>=演算子 と同等の機能を≥演算子 で実装する
左の値が右の値と同じかそれより大きいかを判定する演算子「≥」の定義も、先ほどと同様に実装できます。
infix operator ≥ { associativity none precedence 130 }
public func ≥ <T : Comparable>(lhs: T, rhs:T) -> Bool {
return lhs >= rhs
}
これで、次のように値の大小関係を比較できます。
if value1 ≥ value2 {
}
ちなみに「≥」の記号は、日本語キーボードや英語キーボードなら
キーで入力できます。ちょうど が印字されているキーです。!=演算子 と同等の機能を≠演算子 で実装する
左の値と右の値とが一致しないかを判定する演算子「≠」も定義しています。
標準の一致判定演算子では値の型がEquatableプロトコル に準拠していれば良いので、今回の演算子の実装のところでもEquatableプロトコル を要求するようにします。
infix operator ≠ { associativity none precedence 130 }
public func ≠ <T : Equatable>(lhs: T, rhs:T) -> Bool {
return lhs != rhs
}
これで、次のように値の不一致性を判定できます。
if value1 ≠ value2 {
}
ちなみに「≠」の記号は、日本語キーボードや英語キーボードなら
キーで入力できます。