見出し画像

今でしょ!Swift - 整数と型

整数の境界

整数は小数点のない整数値を全部含みます(42、-23 など)。整数とは符号付き(正の値、または 0、または負の値) または符号なし(正の値、または 0) です。
Swift は符号付きと符号なしの整数値を 8, 16, 32, 64 ビットの形式で提供します。これらは C 言語の名前に合わせて命名されています。8 ビットの符号なし整数UInt8、32 ビットの符号付き整数は Int32 です。Swift の全ての型と同様に、これらの整数値型の頭文字は大文字です。

https://www.swiftlangjp.com/language-guide/the-basics.html#%E6%95%B4%E6%95%B0%E3%81%AE%E5%A2%83%E7%95%8Cinteger-bounds
let minValue = UInt8.min  // minValue は 0 で、 UInt8 型です
let maxValue = UInt8.max  // maxValue は 255 で UInt8 型です

いつも使う整数は"+"や”-”も含めて使っていると思います。この"+"のみを表示できる"UInt"として使うことがあります。

普段は自動で認識され数字は"Int"と認識され、小数点の数字は"Double"と自動的に認識されます。

Swift は型安全な言語です。型安全な言語は、扱っている値の型を明確にします。String が必要な場合に、間違って Int を渡すようなことはありません。
型安全なことから、コンパイル時に型チェックが行われ、間違った型に対してはエラーを示します。これによって開発時に素早くエラーに気がつき修正をすることができます。

https://www.swiftlangjp.com/language-guide/the-basics.html
let meaningOfLife = 42
// meaningOfLife は Int 型と推論されます
let pi = 3.14159
// pi は Double 型と推論されます


数値リテラルというのは数字そのもの、0,1,2,3,4・・・ということになります。文字リテラルというと"Hello"という文字そのものを指します。

数値リテラルは、下記の方法で書くことができます。
・プレフィックスなしの 10 進数
・0b をプレフィックスにした 2 進数
・0o をプレフィックスにした 8 進数
・0x をプレフィックスにした 16 進数

例示があるように

let decimalInteger = 17
let binaryInteger = 0b10001       // 17 は2進数表記
let octalInteger = 0o21           // 17 は8進数表記
let hexadecimalInteger = 0x11     // 17 は16進数表記

右側に何も書いていないdecimalIntegerは10進数。

浮動小数点数リテラルは、10 進数と 16 進数にできます。

let decimalDouble = 12.1875
let exponentDouble = 1.21875e1
let hexadecimalDouble = 0xC.3p0

アンダースコア(_)を追加することで可読性を向上させることができます

let paddedDouble = 000123.456
let oneMillion = 1_000_000
let justOverOneMillion = 1_000_000.000_000_1


数値型の変換

定数や変数に使う数字は Int 型を使うことが推奨されています。普段使いでは型指定しない限りは"Int"となるので特にややこしいコードにならなければそのまま使えば良いということになります。

もう少し突っ込んで

整数値の定数や変数に保持できる範囲は、それぞれの整数値型によって異なります。Int8 の定数や変数は、−128 から 127 まで保持できます。UInt8 の定数や変数は、0 から 255 まで保持できます。指定したサイズの整数値型の定数や変数に合わない値を設定しようとするとエラーになります。

https://www.swiftlangjp.com/#%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E5%B1%A5%E6%AD%B4

Intと違ってUIntは扱える範囲が狭まりますので扱いに注意しないといけないということが説明されています。

そこで使われるのが型変換です。

let dnum = 19.987

という数字があります。これは小数点がついているので型はDubleと認識されています。

型を出力してみましょう

print(type(of: dnum))

とすると"Double\n"と出てきます。実際、Dubleと認識されていますね。

これを"Int"に型変換するには

let Inum = Int(dnum)

頭に"Int(変換したい数字又は変数)"とすると指定した型、この場合は"Int"に変換されました。他の型、文字などの変換もできます。文字だと、String()を使えば文字列に変更できます。

let st = String(dnum)

print(type(of: st))

"String\n"と出力されます。文字に変換されました

整数と浮動小数点数の変換

let three = 3
let pointOneFourOneFiveNine = 0.14159
let pi = Double(three) + pointOneFourOneFiveNine
// pi は 3.14159 で Double 型と推論されます

変換、Double型で結合しています。

let integerPi = Int(pi)

さらにInt型に変換します。Int()を使っています。

タイプエイリアス

タイプエイリアス(Type Aliases)を使うことで最初からある型に別の名前を定義することができます。

使い方は"typealias"キーワードをつけます。

typealias AudioSample = UInt16

型の名前をより適切、わかりやすい名前で書きたい場合に使えます。



この記事が気に入ったらサポートをしてみませんか?