abs()じゃないの?
もちろんabs()
でいいです。
しかし、Swiftのすべての数値型にはプロパティとして大きさ(magnitude)を備えています。
ドキュメントにもmagnitudeは絶対値であると明記されています。
使う
let i: Int = -1
let f: Float = -5.3
let d: Double = -3.0918
print(i.magnitude) // prints 1
print(f.magnitude) // prints 5.3
print(d.magnitude) // prints 3.0918
結果は大きさ(絶対値)です。
let i: Int = 1
let f: Float = 5.3
let d: Double = 3.0918
print(i.magnitude) // prints 1
print(f.magnitude) // prints 5.3
print(d.magnitude) // prints 3.0918
正数でもおなじです。
そして、
let ui: UInt = 1
let ui8: UInt8 = 1
let ui16: UInt16 = 1
let ui32: UInt32 = 1
let ui64: UInt64 = 1
print(ui.magnitude) // prints 1
print(ui8.magnitude) // prints 1
print(ui16.magnitude) // prints 1
print(ui32.magnitude) // prints 1
print(ui64.magnitude) // prints 1
符号無し整数もmagnitude
プロパティをもっています。
なにもの?
このmagnitude
プロパティはNumeric
プロトコルが持っています。
Numeric
プロトコルは全ての数値型が適合すべきプロトコルです。
Numeric
プロトコルには加減乗算が含まれておりまさしく数値型の基本となっています。(除算はありません。)
しかし、このmagnitude
プロパティは元の数値型と違う型である可能性があります。
たとえば実数ベクトル型を考えた場合、その大きさは実数であるためこのような措置がとられています。
このためはジェネリックな型や関数で使用する場合問題が発生することが予想されます。
なので絶対値を取得したい場合はabs()
を使いましょう。
え?
いかがでしたか?
数値型から数値の大きさを取得する方法を見てきました。
数値型はNumeric
プロトコルに適合する型だということが分かりました。
またNumeric
プロトコルがもつnagmitude
プロパティがその大きさを示すものであることがわかりました。
またnagmitude
プロパティの型が元の方と異なる場合があるためジェネリックな対象での使用には問題が発生する可能性があることも分かりました。
そのため絶対値を求めたい場合は通常abs()
を使うことが推奨されていることも分かりました。
nagmitude
はその大きさが必要な時のみの使用にとどめましょう。
え?
え?