Swift での範囲内の数値の判定バリエーション
Comparison operator + logical AND operator
他の言語と同じ <
>
<=
>=
&&
を使うパターン
条件 | 比較演算子+論理和演算子 |
---|---|
0以上1以下 | if 0.0 <= value && value <= 1.0 |
0以上1未満 | if 0.0 <= value && value < 1.0 |
0超え1以下 | if 0.0 < value && value <= 1.0 |
0超え1未満 | if 0.0 < value && value < 1.0 |
Comparison Operator
https://docs.swift.org/swift-book/LanguageGuide/BasicOperators.html#ID70
Logical AND Operator
https://docs.swift.org/swift-book/LanguageGuide/BasicOperators.html#ID78
Comparison operator + comma
Swift ではカンマ ,
で条件を列挙できる *1
条件 | 比較演算子+論理演算子 |
---|---|
0以上1以下 | if 0.0 <= value, value <= 1.0 |
0以上1未満 | if 0.0 <= value, value < 1.0 |
0超え1以下 | if 0.0 < value, value <= 1.0 |
0超え1未満 | if 0.0 < value, value < 1.0 |
Range + nextUp, nextDown
もう一つ Swift で Range
ClosedRange
を使ったパターン
肝は FloatingPoint
の nextUp
と nextDown
nextUp
はその値より大きい最も小さな値
nextDown
はその値より小さい最も大きな値
条件 | Range+nextUp(Down)+パターンマッチング |
---|---|
0以上1以下 | if case 0.0...1.0 = value |
0以上1未満 | if case 0.0..<1.0 = value |
0超え1以下 | if case 0.0.nextUp...1.0 = value |
0超え1未満 | if case 0.0.nextUp..<1.0 = value |
0超え1未満 | if case 0.0.nextUp...1.0.nextDown = value |
ちなみに、「対象の値」と「対象の値より大きい最も小さな値」の差分って何?
nextUp
nextDown
によってどう値が変化するの?
という疑問への答えは以下。
0.0.nextUp == .leastNonzeroMagnitude // true
覚えてしまえば1つの条件式で書けてしまうので楽かも?
Range (half-open range)
https://developer.apple.com/documentation/swift/range
ClosedRange
https://developer.apple.com/documentation/swift/closedrange
nextUp
https://developer.apple.com/documentation/swift/floatingpoint/1848104-nextup
nextDown
https://developer.apple.com/documentation/swift/floatingpoint/3017979-nextdown
leastNonzeroMagnitude
https://developer.apple.com/documentation/swift/floatingpoint/1848591-leastnonzeromagnitude
追記
Range + nextUp, nextDown + ~=
記事を見たiOSエンジニアの人から他のパターンも教えてもらった
if case 0.0...1.0 = value
これを演算子 ~=
を使って
if 0.0...1.0 ~= value
と置き換え可能との事。
置き換え版は以下
条件 | Range+nextUp(Down)+パターンマッチング |
---|---|
0以上1以下 | if 0.0...1.0 ~= value |
0以上1未満 | if 0.0..<1.0 ~= value |
0超え1以下 | if 0.0.nextUp...1.0 ~= value |
0超え1未満 | if 0.0.nextUp..<1.0 ~= value |
0超え1未満 | if 0.0.nextUp...1.0.nextDown ~= value |
Appleのドキュメントによれば ~=
はパターンマッチング演算子 (pattern-matching operator) で
case statement
の書き方のパターンマッチングは内部でこの演算子を使用しているらしい。
勉強になった。
~=(::)
https://developer.apple.com/documentation/swift/1539154
*1:ドキュメントの記載場所は見当たらなかった。どこかに書いてあるんだろうけど。。