変数と型
読了目安 約3分
let と var で値に名前を付ける。Int、Double、String と型変換、オプショナルの入り口。
この章の目次
計算した値を後で使うには、値に名前を付けます。 値を入れておく名前付きの入れ物が変数です。
let で名前を付ける
let price = 100
print(price)
print(price * 3)let 名前 = 値 で、値に名前が付きます。
= は「等しい」ではなく「右の値を左の名前に入れる」という指示です。
let で作った変数は定数と呼ばれ、後から値を変えられません。
let price = 100
price = 200main.swift:2:1: error: cannot assign to value: 'price' is a 'let' constantvar は後から変えられる
値を入れ替えたいときは var で作ります。
var count = 0
count = count + 1
count = count + 1
print(count)count = count + 1 は「今の count に 1 を足して入れ直す」という意味です。
Swift の流儀は、まず let で書くことです。
値が変わらない名前が多いほど、コードを読むときに追いかける変化が減ります。
変えたくなったときだけ var に直します。
型
値の種類を型と呼びます。
| 型 | 意味 | 例 |
|---|---|---|
Int | 整数 | 42、-7 |
Double | 小数 | 2.5、3.0 |
String | 文字列 | "こんにちは" |
右辺の値から型を自動で決める仕組みが型推論です。
let b: Double = 10 のように型を書いて指定する書き方は型注釈と呼びます。
let a = 10
let b: Double = 10
print(a, b)型が違うと計算できない
Int と Double は直接足せません。
let a = 10
let b = 2.5
print(a + b)main.swift:3:9: error: binary operator '+' cannot be applied to operands of type 'Int' and 'Double'Double(a) で整数を小数に、Int(b) で小数を整数に変換して、型をそろえてから計算します。
let a = 10
let b = 2.5
print(Double(a) + b)
print(a + Int(b))試してみよう: print(Int(2.9)) を足して、四捨五入ではなく切り捨てになることを確かめてください。
オプショナル
readLine() は、標準入力から 1 行を文字列として読み込みます。
ただし結果の型は String ではなく String? です。
? 付きの型はオプショナルと呼ばれ、「値があるか、値なし」を表します。
入力が残っていなければ値なしです。
後ろに ! を付けると中身を取り出せますが、値なしだったときは「実行時エラー」で止まります。
let n = Int(readLine()!)!
print(n * 2)21Int("21") のような文字列から整数への変換も、数字でない文字列では失敗します。
だから変換の結果もオプショナルで、! がもう 1 つ必要です。
Intは 64 ビットの整数で、約 ±922 京(9.2 × 10^18)まで扱えます。
学びどころ
| 概念 | 一言まとめ |
|---|---|
let | 定数。まずこれで書くのが Swift の流儀 |
var | 後から値を入れ替えられる変数 |
Int / Double / String | 整数、小数、文字列の型 |
| 型推論 | 右辺の値から型が自動で決まる |
Int(x) / Double(x) | 型をそろえる変換。小数から整数は切り捨て |
| オプショナル | 値なしがありうる型。! で中身を取り出す |
演習
1 行目に整数 N が入力されます。 N 年は何秒かを計算して出力してください。 1 年は 365 日とします(1 ≤ N ≤ 100000)。
入力例:
1
出力例:
31536000模範解答
let n = Int(readLine()!)!
print(n * 365 * 24 * 60 * 60)N = 100000 でも答えは約 3.2 × 10^12 で、Int の範囲に収まります。