tetu式

ゲームと音楽・作曲の自己満足と悩みどころの多いプログラムのブログ。

Swiftの変数、定数の宣言と数値変数型

前回は特に変数宣言に触れずに終了したので
今回はそこのあたりについて触れてゆきます。



Swiftの変数、定数宣言

Swift上では変数や定数の宣言は以下の通りになります

var hensuu = "変数";
let teisuu = "定数";

varで始めた場合は変数、letで始めた場合は定数の宣言となります。
他の言語だと定数は const で宣言する事が多いですかね。
teisuuは定数なので


f:id:stickpan:20160126184912p:plain


変更しようとしたらもちろん怒られます。

あとなんと無しに変数名や定数名を入れましたが、
他の言語だと定数はアルファベット大文字のアンスコ区切りで命名するのが通例。
消費税とかを定数にするならTAX_RATEとか。

ですが、Appleの公式ドキュメントだと変数と同じような書き方がなされています。

まぁ、コーディング規約は開発グループで取り決めるものだと思っているので
その辺りは臨機応変といったところです。
個人的には定数は大文字アンスコ区切りがしっくりきます。

変数型の宣言

続いて変数型について。

PHPばっかやってるとこの辺がおろそかになりますが、あるとやっぱり安心。
で、型指定の変数の宣言は

var 変数名: 型名;
var 変数名: 型名 = 初期値;


のように書きます。
定数のletでも同様の宣言ができます。

数値型(整数)
var numA: Int8  = 127;
var numB: Int16 = 32767;
var numC: Int32 = 2147483647;
var numD: Int64 = 9223372036854775807;

var numE: UInt8  = 255;
var numF: UInt16 = 65535;
var numG: UInt32 = 4294967295;
var numH: UInt64 = 18446744073709551615;

var numI: Int  = 9223372036854775807;
var numJ: UInt = 18446744073709551615;

var numK = 9223372036854775807;

以上の10種類。
初期値として入れているのはその型の最大値です。
型無指定のnumKはInt型になります。
初期値にnumHやnumJの値を入れてもUIntになったりはしません。


C++だとbyte、short、long型なんてありましたが、
Swiftでは全部Intとビット数の組み合わせで宣言します。
Intの頭にUがつくものはマイナス符号を用いないInt型です。


ビット数をつけずにInt、UIntで宣言することもできます。
こちらは実行環境のワード長に依存し、64bitのMac OSXであれば
Int64, UInt64と同じ長さになります。

f:id:stickpan:20160126195543p:plain


ちなみに、型自体は厳密に言うと違うので、長さが同じでも
完全な同型でなければエラーになります。


数値の代入法として半角アンスコを
入れたり、0埋めで代入できたりします。


f:id:stickpan:20160126194422p:plain


初期値にこんなでかい数字入れることなんて
そうそうないかと思いますが、横並びを綺麗にしたり、
カンマ区切りの代わりに使えます。

ただし、代入値の先頭にアンスコはダメです。
なんでかって言ったら・・・変数宣言はアンスコで始めることが
可能だからですかね。


f:id:stickpan:20160126195016p:plain


こんな書き方したら「ザッケンナコラー!!スッゾコラー!!」とか言われそうですが
これでもエラーは出ませんからね。

浮動小数
var numA: Float   = 3.2;
var numB: Double  = 6.4;
var numC: Float80 = 8.0;
var numD          = 6.4;

小数型は3種類。
型無指定のnumDはDouble型になります。


FloatとDoubleは他の言語でも見かける一般的な小数型ですが、
Float80というのはなかなか見かけない型です。
通常Floatは32ビット、Doubleは64ビットですが、
Float80は見た目通り、80ビットの小数を扱えます。
Double以上の精度を求めたい時とかに使ってあげましょう。

ちなみに以前はさらにその上のFloat96なんて型があったみたいですが


f:id:stickpan:20160126201918p:plain


エラー吐いちゃったのでSwift2.0では使えなくなってるみたいです。
型について調べてたらそういうのがあったので念のため。

あともうちょっと調べたらFloat32、Float64なんてのもありましたが
これらは正確にはFloat、Doubleの別名、エイリアス的なものと思われます。


f:id:stickpan:20160126204221p:plain


実際に代入してみたらエラーなかったので名前が違う同じ型って感じですね。


今までの経験だと型を指定する時は変数名の前

int numA = 3;

というイメージが強かったので
Swiftの書き方はなんか新鮮ですね。