#変数と定数
変数・定数とは、プログラムに登場する値を記憶する入れ物のこと。
値を一時的に保存し、一定の範囲内で必要に応じて再利用できる。
変数・定数に値を入れることを"代入"という。
また、全ての変数・定数は代入できる値の種類を表す"型"を持っている。
#変数と定数の違い
代入できる回数が違う。
変数は何度でも値を代入可能、定数は一度のみ。
#宣言方法
宣言とは、新たな変数や定数を定義すること。
それぞれvar、letキーワードを使う。
(var: variableの略、 let: 英単語let )
//変数の宣言
var 変数名: 型名
//定数の宣言
let 定数名: 型名
例
var a: Int // "a"という名前のInt型の変数
let b: Int // "b"という名前のInt型の定数
上記の「: Int」部分を"型アノテーション"という。
※annotation:注釈、注解
※Int:integer(整数)の略
#値の代入方法
=演算子を使って、左辺に代入先の変数名または定数名、右辺に代入する値を書く。
変数名または定数名 = 代入する値
例
// Int型の変数aを宣言し、値1を代入
var a: Int
a = 1
// 宣言と値代入は同時にできる
var a = 1
#代入可能な値
変数や定数に代入可能な値は、変数や定数の型と一致しているものだけ。
型アノテーションで指定した型と代入する値の型が一致しない場合、コンパイルエラーとなる。
let a: Int = 123 //OK
let b: Int = "abc" //コンパイルエラー
let c: Int = 1 + 2 //演算結果がInt型のため代入OK
#代入による型推論
変数や定数の宣言と同時に値を代入する場合、変数や定数の型は代入する値から推論できる。
プログラムの文脈から暗黙的に型を決定するしくみを"型推論"という。
通常、型推論が利用できるケースでは型アノテーションは省略し、
型アノテーションがなければ変数や定数の型を決定できない場合にのみ型アノテーションを追加する。
例
let a = 123 // Int型の定数
type(of:a) // 型を調べる関数
let b = "abc" // String型の定数
type(of:b) // 型を調べる関数
// 実行結果
Int.Type
String.Type
#定数への再代入
変数には何度でも値を代入できるが、定数は一度だけ。
定数への再代入はコンパイラが自動的に検出しエラーとするため、定数が意図せず変更されることはない。
例
let a = 1
a = 2 //2度目の代入はコンパイルエラー
let a: Int
a = 1 //1度目の代入はOK
a = 2 //2度目の代入はコンパイルエラー
#値の利用方法
変数や定数の値を利用するには、値を使用する箇所に変数名や定数名を記述する。
変数名や定数名は、実行時にその値を返す式として解釈される。
let a = 1
let b = a //定数aの値である "1" が定数bに代入される
#初期化前の変数や定数の利用
変数や定数への最初の代入を"初期化"という。
初期化されていない変数や定数は値を持っていないため、変数や定数の値を参照する式では値を取り出すことはできない。
Swiftのコンパイラはそのような式を自動的に検出し、コンパイルエラーを出す。
let a: Int // Int型で宣言。値は代入してない(初期化してない)
let b = a + 1 //aが初期化されていないためコンパイルエラー