if 文と比較演算子
読了目安 約3分
条件で処理を分ける。比較演算子と論理演算子で条件を組み立てる。
この章の目次
これまでのプログラムは、上から下への一本道でした。 if 文を使うと、条件によって実行する処理を選べます。
if 文
let x = Int(readLine()!)!
if x >= 10 {
print("x は 10 以上です")
}
print("ここは必ず実行されます")25if 条件 { ... } は、条件が成り立つときだけ { から } の中を実行します。
{ から } までのまとまりをブロックと呼びます。
試してみよう: 入力を 5 に変えて、1 行目の出力が消えることを確かめてください。
比較演算子
条件の部分には、値を比べる式を書きます。 比べるための記号が比較演算子です。
| 演算子 | 意味 |
|---|---|
a == b | a と b が等しい |
a != b | a と b が等しくない |
a < b | a は b より小さい |
a <= b | a は b 以下 |
a > b | a は b より大きい |
a >= b | a は b 以上 |
= を 1 つだけ書くと代入になってしまいます。
「等しい」は == と 2 つ重ねます。
else と else if
条件が成り立たなかったときの処理は else のブロックに書きます。
条件を追加するときは else if でつなぎます。
let score = Int(readLine()!)!
if score >= 80 {
print("よくできました")
} else if score >= 50 {
print("合格です")
} else {
print("もう一歩です")
}65条件は上から順に調べられ、最初に成り立った 1 つのブロックだけが実行されます。
入力が 65 なら、score >= 80 は不成立、次の score >= 50 が成立して「合格です」だけが出ます。
インデントの読み方
ブロックの中の行は、行頭に空白を入れて字下げします。 この字下げがインデントです。 深さが「いま何段目のブロックの中か」を表します。
if 文の中に if 文を書くと、インデントは 2 段になります。
if op == "/" {
if b == 0 {
print("error")
}
}条件の組み合わせ
複数の条件は論理演算子でつなぎます。
| 演算子 | 意味 |
|---|---|
A && B | A かつ B |
A || B | A または B |
!A | A でない |
let age = Int(readLine()!)!
if 13 <= age && age <= 19 {
print("ティーンエイジャーです")
}
if age < 6 || age >= 65 {
print("入場は無料です")
}1513 <= age && age <= 19 で「13 以上 19 以下」を表せます。
数学のように 13 <= age <= 19 とは書けません。
学びどころ
| 概念 | 一言まとめ |
|---|---|
if / else if / else | 最初に成り立った 1 つのブロックだけ実行 |
== | 等しいかの比較。代入の = と区別する |
&& / || / ! | かつ、または、でない |
| インデント | ブロックの深さを表す字下げ |
演習
電卓をつくりましょう。
「A op B」の形で 1 行入力されます。
A と B は整数、op は + - * / のどれかです。
op に応じた計算結果を出力してください。
ただし op が / で B が 0 のときは、error と出力してください。
整数同士なので、割り算の結果は切り捨てです。
入力例 1:
1 + 2
出力例 1:
3
入力例 2:
5 / 0
出力例 2:
error模範解答
let parts = readLine()!.split(separator: " ")
let a = Int(parts[0])!
let op = String(parts[1])
let b = Int(parts[2])!
if op == "+" {
print(a + b)
} else if op == "-" {
print(a - b)
} else if op == "*" {
print(a * b)
} else if op == "/" {
if b == 0 {
print("error")
} else {
print(a / b)
}
}/ のときだけ、さらに B が 0 かどうかで分けます。
2 段の if 文は、インデントを見れば対応が追えます。