let / var / 型推論
| 対応: | Swift 1.0(2014) |
|---|
Swiftでは『let』で定数、『var』で変数を宣言し、代入した値から型を自動で推論する型推論機能があります。
構文
// 定数(変更不可) let 定数名 = 値 let 定数名: 型 = 値 // 変数(変更可) var 変数名 = 値 var 変数名: 型 = 値
構文一覧
| 構文 | 概要 |
|---|---|
| let 名前 = 値 | 定数を宣言します。一度代入した値は変更できません。 |
| var 名前 = 値 | 変数を宣言します。後から値を変更できます。 |
| let 名前: 型 = 値 | 型を明示して定数を宣言します。型推論が難しい場合や意図を明確にしたい場合に使います。 |
| var 名前: 型 | 型を指定して変数を宣言します。初期値を後から代入できます。 |
サンプルコード
sample_let_var.swift
// 定数の宣言(型推論でInt型になります)
let maxScore = 100
// 変数の宣言と変更
var score = 0
score = 85
// 型を明示した宣言
let name: String = "岡部倫太郎"
var height: Double = 170.5
// 型推論の例
let isActive = true // Bool型に推論されます
let pi = 3.14159 // Double型に推論されます
let greeting = "こんにちは" // String型に推論されます
print("名前: \(name), スコア: \(score)")
swift let_var.swift 名前: 岡部倫太郎, スコア: 85
let_var2.swift — 遅延初期化と複数宣言
// 遅延初期化:宣言時に値を与えず後から代入します。
var username: String
username = "鳳凰院凶真"
print(username)
// 複数変数を一行で宣言します。
var x = 0, y = 0, z = 0
x = 10; y = 20; z = 30
print("x=\(x), y=\(y), z=\(z)")
// タプルを使った多重代入
let (minVal, maxVal) = (0, 100)
print("min=\(minVal), max=\(maxVal)")
// 定数はスコープ内で一度だけ代入できます(遅延初期化)。
let threshold: Int
let condition = true
if condition {
threshold = 90
} else {
threshold = 70
}
print("threshold: \(threshold)")
swift let_var2.swift 鳳凰院凶真 x=10, y=20, z=30 min=0, max=100 threshold: 90
let_var3.swift — 型アノテーションと型の確認
// 数値型の明示的な宣言
let age: Int = 18
let temperature: Float = 36.6 // FloatとDoubleは別型です
let distance: Double = 299_792.458 // アンダースコアで区切れます
let flag: Bool = false
// 文字列補間で型の値を確認します。
print("age: \(age)")
print("temperature: \(temperature)")
print("distance: \(distance)")
print("flag: \(flag)")
// var は再代入可能、let は不変です。
var level = 1
level += 1
level += 1
print("level: \(level)") // 3
// 型推論の限界:曖昧な場合はアノテーションが必要です。
let value: Double = 42 // 42はInt型に推論されるためDoubleと明示します
print("value: \(value)")
swift let_var3.swift age: 18 temperature: 36.6 distance: 299792.458 flag: false level: 3 value: 42.0
概要
Swiftは型安全な言語であり、すべての変数・定数は型を持ちます。『let』で宣言した定数に値を再代入しようとするとコンパイルエラーになります。変更の必要がない値には積極的に『let』を使うことで、意図しない書き換えを防げます。
型推論により、右辺の値から自動的に型が決定されるため、多くの場合は型の明示が不要です。ただし、初期値なしで宣言する場合や、推論される型と異なる型を使いたい場合は型アノテーション(『: 型』)を明示する必要があります。
型キャストについては型キャスト(as / as? / as! / is)を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。