Swift教室 Swift と競技プログラミングの教室

if 文と比較演算子

読了目安 約3分

条件で処理を分ける。比較演算子と論理演算子で条件を組み立てる。

この章の目次

これまでのプログラムは、上から下への一本道でした。 if 文を使うと、条件によって実行する処理を選べます。

if 文

Swift
let x = Int(readLine()!)!
if x >= 10 {
    print("x は 10 以上です")
}
print("ここは必ず実行されます")
入力例
25

if 条件 { ... } は、条件が成り立つときだけ { から } の中を実行します。 { から } までのまとまりをブロックと呼びます。

試してみよう: 入力を 5 に変えて、1 行目の出力が消えることを確かめてください。

比較演算子

条件の部分には、値を比べる式を書きます。 比べるための記号が比較演算子です。

演算子意味
a == ba と b が等しい
a != ba と b が等しくない
a < ba は b より小さい
a <= ba は b 以下
a > ba は b より大きい
a >= ba は b 以上

= を 1 つだけ書くと代入になってしまいます。 「等しい」は == と 2 つ重ねます。

else と else if

条件が成り立たなかったときの処理は else のブロックに書きます。 条件を追加するときは else if でつなぎます。

Swift
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 段になります。

Swift
if op == "/" {
    if b == 0 {
        print("error")
    }
}

条件の組み合わせ

複数の条件は論理演算子でつなぎます。

演算子意味
A && BA かつ B
A || BA または B
!AA でない
Swift
let age = Int(readLine()!)!
if 13 <= age && age <= 19 {
    print("ティーンエイジャーです")
}
if age < 6 || age >= 65 {
    print("入場は無料です")
}
入力例
15

13 <= 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
模範解答
Swift
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 文は、インデントを見れば対応が追えます。