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 noneprecedence 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 {
	
}

ちなみに「≠」の記号は、日本語キーボードや英語キーボードなら ^ キーで入力できます。