【Swift】if文の使い方(Swift 2.1、XCode 7.2)
コードの中に質問を記述し、正しいか、間違いかで処理を分けることを条件分岐という。
例えば、「変数aの値は0以上である」という質問に対し、正しい場合は「0以上です」と出力、間違いの場合は「0未満です」と出力するといった具合だ。
プログラミングの世界では、質問のことを条件式、正しいことをtrue(真)、間違いはfalse(偽)と表現する。
具体的には以下のコードのようになる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
/* ** if〜else文の記述例 */ var a = 10 if ( a >= 0 ) { print("0以上です") } else { print("0未満です") } // 実行結果 // 0以上です |
Swiftではifの横につける条件式の括弧は省略することができる。例えば、先ほどの条件式「if ( a >= 0)」は「if a >= 0」と記述できる。ただし、括弧を付けておいたほうが条件式であることが分かりやすいので、付けておいたほうが親切だ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
/* ** if文の条件式の括弧を省略する */ var a = 10 if a >= 0 { print("0以上です") } else { print("0未満です") } // 実行結果 // 0以上です |
1つの質問の答えが間違っている場合に別の質問をしたいときは、else ifを使って以下のコードのように記述する。最初の質問が間違っていた場合のみ次の質問が行われる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/* ** if〜elseif〜else文 */ var a = 10 if ( a >= 20 ) { print("20以上です") } else if ( a >= 0 ) { print("0以上です") } else { print("0未満です") } // 実行結果 // 0以上です |
else ifを使わずにif文を連続で書けばいいと思うかもしれないが、if文の連続にすると、最初の質問が正しい場合は別の質問をする必要が無くてもしてしまうので注意が必要だ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
/* ** if文を連続で記述 */ var a = 10 if ( a >= 0 ) { print("0以上です") } if ( a >= 10 ) { print("10以上です") } else { print("0未満です") } // 実行結果 // 0以上です // 10以上です |
2つの質問を書いて両方の質問が正しい時とそうでない時の分岐をさせるには、&&を使って以下のコードのように記述する。&&は「かつ」と読む。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
/* ** if文のAND条件 */ var a = 10 var b = 20 if ( a >= 0 && b >= 0) { print("aとbは0以上です") } else { print("aまたはbは0未満です") } // 実行結果 // aとbは0以上です |
2つの質問を書いて、どちらか1つでも質問が正しい場合の処理と、両方とも正しくなかった場合の処理で分岐させるには、||を使って以下のコードのように記述する。||は「または」と読む。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
/* ** if文のOR条件 */ var a = 10 var b = 20 if ( a >= 20 || b >= 20) { print("aまたはbは20以上です") } else { print("a、bどちらも20未満です") } // 実行結果 // aまたはbは20以上です |
&&、||を組み合わせれば1つの条件式にいくつでも質問を記述できる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/* ** if文の条件式に&&, ||を複数指定する */ var a = 10 var b = 20 var c = 30 if ( (a >= 20 || b >= 20) && c >= 20) { print("aまたはbは20以上です。cは20以上です") } else { print("a、b, cどれも20未満です") } // 実行結果 // aまたはbは20以上です。cは20以上です |
if文のスコープ内(中括弧{}で挟まれた箇所)で宣言した変数はスコープ外では使うことができないので注意すること。
例えば、以下のコードではスコープ内で変数bを宣言し、スコープ外で変数bを参照しようとするが使うことはできないのでエラーが発生する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
/* ** 変数のスコープ */ var a = 10 if ( a >= 0 ) { var b = 30 print("aの値は\(a)、bの値は\(b)") } print("aの値は\(a)、bの値は\(b)") // 実行結果 // error: use of unresolved identifier 'b' |
以下のコードのようにスコープ外で変数bを宣言すれば、スコープ内でも外でも使うことができる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/* ** 変数のスコープ */ var a = 10 var b = 0 if ( a >= 0 ) { b = 30 print("aの値は\(a)、bの値は\(b)") } print("aの値は\(a)、bの値は\(b)") // 実行結果 // aの値は10、bの値は30 // aの値は10、bの値は30 |