if文
条件分岐には、if文がよく使われます。
if文のほかにもswitch文なども使われますが、ここでは基本的なif文を使って「条件分岐」を実現してみましょう。
目次
1. if文
「if文」には「if」「else if」「else」という3つのキーワードが登場します。
それぞれの使い方を見ていきましょう。
1-1. if
「if」は、あたえられた条件が真(true)のときに実行される「ブロック」を持ちます。
if( ブロック実行条件式 ) {
ブロック実行条件式が真のときに実行されるブロック
}
次のプログラムを実行してみてください。
let x=1
if( x == 1 ) {
print("xは1です")
}
結果は、「xは1です」と表示されますよね。
このif文の「ブロック実行条件式」は「x == 1」(xが1と等しい)となっています。
xには1が代入されているので、「ブロック実行条件式」は「真(true)」と評価されて、結果的にブロック内が実行されています。
ちなみに、xに1以外のものが代入されている場合は、「ブロック実行条件式」が「偽(false)」と評価されるので、ブロック内は実行されません。
では、「x」が「1」の場合と「2」の場合で表示を分けたい場合はどうするのでしょう?
それには、「else if」を使います。
1-2. else if
「else if」も、あたえられた条件が真(true)のときに実行される「ブロック」を持ちます。
「else if」は、それ単体で使う事はできません。
「else if」は、「if」とセットで使い、分岐条件を増やすことができます。
「else if」は、「if」ブロックが終わった位置に書きます。
そして、「else if」はつづけて、いくつでも書くことができます。
if( ブロック実行条件式1 ) {
ブロック実行条件式1が真のときに実行されるブロック
}
else if( ブロック実行条件式2 ) {
ブロック実行条件式1が偽で、ブロック実行条件式2が真のときに実行されるブロック
}
else if( ブロック実行条件式3 ) {
ブロック実行条件式1と2が偽で、ブロック実行条件式3が真のときに実行されるブロック
}
.
.
.
.
「if-else if」を使ったプログラムの処理の流れは、
↓
「ブロック実行条件式2」が「真」なら「ブロック実行条件式2のブロックを実行して終わり」、「偽」なら「ブロック実行条件式3」へ
↓
「ブロック実行条件式3」が「真」なら「ブロック実行条件式3のブロックを実行して終わり」、「偽」なら.....
といった感じで、上から順に「ブロック実行条件式」が評価され行き、「真」だったブロックのみが実行されて一連の「if-else if」文の処理が終わります。
要するに、ifも含め先に「真」となったブロックのみが実行されるということです。
次のプログラムを実行してみてください。
let x=2
if( x == 1 ) {
print("xは1です")
}
else if( x == 2 ) {
print("xは2です")
}
else if( x == 3 ) {
print("xは3です")
}
結果は、「xは2です」と表示されます。
「x」の値を「3」に変えたらどうなりますか?
結果は、「xは3です」と表示されます。
では、「x」を「4」として実行するとどうですか?
結果は、なにも表示されません。
「x」は1でも2でも3でもないので、全ての条件が「偽」になるためprintが実行されずに、なにも表示されませんでした。
でも、「x」が「1~3」以外のときも何か表示させたい場合もありますよね?
そんなときは、「else」を使います。
1-3. else
「else」は、その前にある「ifやelse ifの条件全て」が「偽」のときに実行されるブロックです。
(どの条件にもあてはまらなかったときに実行されるブロック)
「else」も「else if」と同じく、それ単体で使う事はできません。
「else」は、「if」または「if-else if」とセットで使います。
「else」は、ifブロックが終わった位置に続けて書くか、else ifブロックが終わった位置に書きます。
「else」はいつでも、「if文」の最後に書くということです。
ifのみの場合
if( ブロック実行条件式 ) {
ブロック実行条件式が真のときに実行されるブロック
}
else {
ブロック実行条件式が偽のときに実行されるブロック
}
if-else ifの場合
if( ブロック実行条件式1 ) {
ブロック実行条件式1が真のときに実行されるブロック
}
else if( ブロック実行条件式2 ) {
ブロック実行条件式1が偽で、ブロック実行条件式2が真のときに実行されるブロック
}
else {
どのブロック実行条件式も偽のときに実行されるブロック
}
下のプログラムを実行してみてください。
let x=1000
if( x == 1 ) {
print("xは1です")
}
else if( x == 2 ) {
print("xは2です")
}
else if( x == 3 ) {
print("xは3です")
}
else {
print("xは1でも2でも3でもないです")
}
結果は、「xは1でも2でも3でもないです」が表示されます。
「x」には「1000」が代入されていますね。
「x」の値はどの条件にもあてはまらないので、「else」ブロックが実行されることになります。
1-4. 入れ子のif文
また、「if文」は、入れ子(ネスト)にすることもできます。
入れ子(ネスト)にすることによって、もっと複雑な条件を作ることができます。
下は、「x」の値が、「1以上100以下」なら「xは1以上100以下です」を表示するというプログラムです。
let x=50
if( x >= 1 ) {
if( x <= 100 ) {
print("xは1以上100以下です")
}
}
最初に「x」が「1以上」かが評価され「真」なら、そのブロック内に処理が移行して、「100以下」がが評価されます。
上の例は、別の書き方として、条件をつなぎ合わせて一つのifにまとめることもできます。
let x=50
if( x >= 1 && x <= 100 ) {
print("xは1以上100以下です")
}
入れ子(ネスト)にして書くのがいいのか、つなぎ合わせて書くのがいいのかはケースバイケースです。
慣れないうちは、入れ子(ネスト)の方が理解しやすいかもしれません。
2. 試してみよう
下のプログラムを、「x」が「0」のときに「1以上ではない」と表示し、「x」が「1000」のときに「1以上だが100を超えています」と表示するように修正してみてください。
let x=50
if( x >= 1 ) {
if( x <= 100 ) {
print("xは1以上100以下です")
}
}
2-1. 答え例
let x=50
if( x >= 1 ) {
if( x <= 100 ) {
print("xは1以上100以下です")
}
else {
print("1以上だが100を超えています")
}
}
else {
print("1以上ではない")
}
3. まとめ
「if文」を使って条件分岐する処理を書きました。
「if」は、あたえられた条件が真(true)のときに実行される「ブロック」を持ちます。
「else if」も、あたえられた条件が真(true)のときに実行される「ブロック」を持ちます。
「else if」は、「if」とセットで使い、分岐条件を増やすことができます。
「else」は、その前にある「ifやelse ifの条件全て」が「偽」のときに実行されるブロックです。
「else」は、「if」または「if-else if」とセットで使います。
「if文」は、入れ子にすることができます。
次は、「繰り返し処理」についてです。