2.

Swiftで変数を宣言する方法|varの使い方とletとの違い・型推論

編集

Swiftで変数を宣言するには、var キーワードに続けて変数名と値を書く(例: var name = "Taro")。これだけで、あとから値を入れ替えられる「変数」が用意される。

 

この記事の要点
  • 変数は var 名前 = 値 の形で宣言する。宣言後に別の値を再代入できる。
  • 初期値を書けば、型は型推論で自動的に決まる。明示したいときは var x: Int = 5 のように型注釈を付ける。
  • 再代入しない値は let(定数)で宣言する。一般に「まず let、必要になったら var」が推奨される作法とされる。
  • 変数名はローワーキャメルケース(例: userName)で書くのが一般的。
  • Swiftは型安全で、一度決まった型に別の型の値は代入できない。値が無い状態を許すなら Optional(var x: Int?)を使う。

 

基本の書き方: var 名前 = 値

Swiftの変数宣言は、var の後ろに変数名、=、初期値の順に並べる。var で宣言した変数は、あとから何度でも別の値を代入し直せる。

var message = "Hello"

print(message)    // Hello

 

message = "Hi"    // 再代入できる

print(message)    // Hi

 

文末のセミコロン(;)は不要で、改行が文の区切りになる。1行に複数の文を書くときだけセミコロンで区切る。

 

型推論と型注釈

初期値を与えると、Swiftはその値から変数の型を自動的に判断する。これを型推論と呼ぶ。下の例では、整数リテラル 5 から count は Int、文字列リテラルから title は String と推論される。

var count = 5      // Int と推論される

var title = "Swift"  // String と推論される

var rate = 0.5    // Double と推論される

 

型を明示したいときは、変数名の後ろに : 型名 を付ける。これを型注釈という。型注釈を付けると、初期値が無くても型だけ先に決めておける(その場合、使う前に必ず値を代入する必要がある)。

var score: Int = 5       // 型注釈ありで初期化

 

var total: Int           // 型だけ宣言

total = 100              // 後から代入

 

整数を Double として扱いたいなど、推論結果と違う型にしたい場合も型注釈が役立つ(例: var price: Double = 100 とすると 100 が Double として扱われる)。

 

var(変数)と let(定数)の違い

var が再代入できる変数なのに対し、let は一度値を決めたら変更できない定数を宣言する。let で宣言した名前にあとから代入しようとすると、コンパイル時にエラーになる。

var counter = 0

counter = 1    // OK(var なので変更できる)

 

let pi = 3.14

// pi = 3     // エラー(let は再代入できない)

 

項目 var(変数) let(定数)
再代入 できる できない
主な用途 値が変化するもの 値が変わらないもの
型推論 あり あり
変更しようとすると そのまま動く コンパイルエラー

 

実務では、「変更する必要が無い値はできるだけ let で宣言し、再代入が必要なものだけ var にする」という書き方が広く推奨されている。let を優先すると、意図しない書き換えを防ぎやすく、コンパイラの最適化や読み手の理解にも役立つとされる。定数そのものの詳しい扱いは、定数の宣言を扱う別記事も参照するとよい。

 

変数名の命名規則

変数名は内容が分かる名前にし、慣習としてローワーキャメルケース(先頭は小文字、単語の区切りを大文字でつなぐ書き方)を用いることが多い。

  • 良い例: userName / itemCount / isLoggedIn
  • 使えるが推奨されにくい例: xa1 のような意味の伝わりにくい名前

命名上のルールとして、次の点に注意する。

  • 先頭を数字にすることはできない(例: 1count は不可、count1 は可)。
  • 大文字と小文字は区別される(nameName は別の変数)。
  • varletclassfunc などの予約語(キーワード)は、そのままでは変数名に使えない。
  • 同じスコープ内で同じ名前を二重に宣言することはできない。

 

型安全: あとから別の型は代入できない

Swiftは型安全な言語で、変数の型が一度決まると、その変数には基本的に同じ型の値しか代入できない。たとえば Int の変数に文字列を入れようとすると、コンパイル時にエラーになる。

var age = 20       // Int

age = 21         // OK(同じ Int)

// age = "twenty"  // エラー(String は代入できない)

 

また、Swiftには「Int を自動で Double にする」といった暗黙の型変換は無い。型の異なる値を組み合わせるときは、明示的に変換する必要がある(例: Double(age))。

 

値が無い状態を表す Optional

「まだ値が決まっていない」「値が無いこともある」状態を表したいときは、型の後ろに ? を付けたOptional(オプショナル)型を使う。Optional は値が入っている状態と、値が無い状態(nil)のどちらも取り得る。

var nickname: String?  // 値が無い状態(nil)から始められる

nickname = "Sho"      // 後から値を入れられる

nickname = nil        // 値が無い状態にも戻せる

 

Optional でない通常の変数には nil を入れられない点に注意する。Optional の値を取り出して使う方法(アンラップ)には複数の書き方があり、別途まとめて理解しておくとよい。

 

よくある落とし穴

落とし穴 内容と対処
何でも var にする 変更しない値まで var にすると、誤って書き換えても気付きにくい。再代入が不要なら let を使う。多くの開発環境では「let にできる」と警告が出ることもある。
暗黙変換を期待する Int と Double をそのまま混ぜて計算しようとするとエラーになる。Double(値) のように明示的に変換する。
初期化前にアクセスする 型注釈だけで初期値を与えていない変数を、値を代入する前に読み出すとコンパイルエラーになる。先に値を代入してから使う。
nil の代入 Optional でない変数に nil を入れようとするとエラーになる。値が無い状態を扱うなら型を Optional(型名?)にする。

 

記述例と出力結果

var str = "Hello, playground"

print(str)

 

Hello, playground

 

FAQ

Q. var と let はどちらを使えばよいですか。

A. 値を変更する必要が無ければ let、再代入が必要なら var を使うのが一般的な目安とされる。迷ったときはまず let で書き、再代入が必要になった時点で var に変えると安全に書きやすい。

 

Q. 型注釈は必ず書く必要がありますか。

A. 初期値を与える場合は型推論が働くため、多くの場面で省略できる。ただし、初期値を与えずに型だけ先に決めたいときや、推論される型と違う型にしたいとき(例: 整数を Double として扱いたいとき)は型注釈を書く。

 

Q. 宣言した変数に違う型の値を入れられますか。

A. 入れられない。Swiftは型安全で、変数の型は宣言時に固定され、その後は同じ型の値しか代入できない。別の型として扱いたい場合は Double(値) のように明示的な変換を行う。

 

まとめ

  • Swiftの変数は var 名前 = 値 で宣言し、宣言後に再代入できる。
  • 初期値があれば型は型推論で決まり、var x: Int = 5 のように型注釈で明示もできる。
  • 再代入しない値は let(定数)で宣言し、変更が必要なものだけ var にするのが推奨される作法とされる。
  • 変数名はローワーキャメルケースが慣習で、予約語や先頭数字、同名の二重宣言は使えない。
  • 型安全のため別の型は代入できず、暗黙変換も無い。値が無い状態を扱うなら Optional(型名?)を使う。
編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. print でデバッグ出力
  2. 変数の宣言
  3. 定数の宣言
  4. データ型
  5. 配列の宣言/追加/削除
  6. クラスとメソッドの作り方と呼び出し方
  7. 繰り返し制御
  8. if文による条件分岐
  9. エラー一覧

最近更新/作成されたページ