ウィキペディアから:
引数が等しいか等しくないかに応じて true または false を返す従来の等値演算子とは異なり、宇宙船演算子は、右側の引数に対する左側の引数の値に応じて、1、0、または -1 を返します。左の引数が右の引数より大きい場合、演算子は 1 を返します。左の引数が右の引数より小さい場合、演算子は -1 を返します。2 つの引数が等しい場合、演算子は 0 を返します。
spaceship 演算子は、主に並べ替えの比較に使用されます。
ウィキペディアから:
引数が等しいか等しくないかに応じて true または false を返す従来の等値演算子とは異なり、宇宙船演算子は、右側の引数に対する左側の引数の値に応じて、1、0、または -1 を返します。左の引数が右の引数より大きい場合、演算子は 1 を返します。左の引数が右の引数より小さい場合、演算子は -1 を返します。2 つの引数が等しい場合、演算子は 0 を返します。
spaceship 演算子は、主に並べ替えの比較に使用されます。
Swift には組み込みの spaceship オペレーターはありませんが、swift で新しいオペレーターを作成するのは簡単です。enum
an の代わりに anを返す新しい演算子を作成しましょうInt
—マジック ナンバーは良くないので、厳密に型指定された言語で戻り値の型に使用する必要はありません。ここまで来たら、Swift の Unicode サポートを利用して、列挙サポートを ←、→、& ↔ を使用して結果を視覚的に示すようにしましょう。
enum Spaceship
{
case ← // LeftIsGreaterThanRight
case → // LeftIsLessThanRight
case ↔ // LeftIsEqualToRight
}
operator infix <=> {}
@infix func <=> <T: Comparable> (left: T, right: T) -> Spaceship {
if left < right { return SpaceShip.→}
if left > right { return SpaceShip.←}
return Spaceship.↔;
}
これで、次のように新しい演算子を使用できます
if someInt <=> someOtherInt == ←
{
// take off!
}
比較結果の値としてマジック ナンバーを使用することを主張する場合 ( Swift では使用しないことを強くお勧めします)、次のようにします。
@infix func <=><T: Comparable> (left: T, right: T) -> Int {
if left < right { return -1 }
if left > right { return 1 }
return 0
}
いいえ、Swift には現在、宇宙船のオペレーターは含まれていません。
カスタム オペレータを定義して、他の言語の宇宙船オペレータの外観と機能を模倣できます。
Swift ではカスタム オペレータで<
,=
および>
文字を使用できるため、カスタム オペレータを次のように定義できます<=>
。
演算子は二項中置演算子で、次のように使用されます。
1 <=> 2 //Returns: -1
2 <=> 1 //Returns: 1
1 <=> 1 //Returns: 0
演算子は、Swift で次のように定義できます。
operator infix <=> {}
@infix func <=><T: Comparable> (left: T, right: T) -> Int {
if left < right { return -1 }
if left > right { return 1 }
return 0
}