【Swift】if elseの書き方とは?
使用状況に応じて使い分けられる初歩的な条件分岐の記述方法から、三項演算子による記述など実践的な書き方まで、実際に動くサンプルコードを見ながら解説していきます。
使用状況に応じて使い分けられる初歩的な条件分岐の記述方法から、三項演算子による記述など実践的な書き方まで、実際に動くサンプルコードを見ながら解説していきます。
スキルアップ
2020/12/18 UP
- プログラミング
- SE資格・スキル
- Swift
現在開発現場で用いられている主要な言語の多くでは、基礎的な条件分岐にifを使用します。この「もしaであればbとする」というif文の構造は、Swiftでも他のプログラミング言語と変わりません。
今回は使用状況に応じて使い分けられる初歩的な条件分岐の記述方法から、三項演算子による記述など実践的な書き方まで、実際に動くサンプルコードを見ながら解説していきます。
Swiftのif文とは
if文は「ある特定の条件下のみ」で実行させたいプログラムを作成するのに適しています。Swiftのif文は、他のプログラミング言語と大きな差異はありません。if...elsif...elseで条件を分岐し、分岐後に実行する処理を記述していきます。
if文を記述する際の基本的な形は次の通りです。
if 条件式 {条件式が真(true)の場合の処理}
else if 条件式2{条件式2が真(true)の場合の処理}
else {その他の場合の処理}
なお、条件式には比較演算子や論理演算子を使用します。
Swiftで使える比較演算子一覧
上述の通り、if文で条件式を記述する場合、比較演算子を使用します。比較演算子は主に2つの値を比較し、結果が真の場合はtrue、偽の場合はfalseを返します。
if文では比較演算子の結果がtrueの場合、条件が合致したとして分岐後の処理が行なわれます。
主に使用される比較演算子は次の通りです。
記述方法 |
処理内容 |
---|---|
a == b |
左右が等しい場合にはtrueを返す |
a != b |
左右が等しくない場合にはtrueを返す |
a < b |
左辺より右辺が大きい場合にはtrueを返す |
a > b |
左辺より右辺が小さい場合にはtrueを返す |
a <= b |
左辺より右辺が大きいか等しい場合にはtrueを返す |
a >= b |
左辺より右辺が小さいか等しい場合にはtrueを返す |
Swiftで使える論理演算子一覧
複数の条件文を組み合わせて比較したい場合は、比較演算子ではなく論理演算子を使用します。論理演算子は2つ以上の条件式を評価し、条件に合致する場合にtrueを返します。
主に使用される論理演算子は次の通りです。
記述方法 |
処理内容 |
---|---|
&& |
AND 左右の式がともにtrueの場合、trueを返す |
|| |
OR 左右の式どちらかがtrueを返す |
! |
NOT 式がtrueの場合はfalseを返し、falseの場合はtrueを返す |
Swift の if文の書き方
ここからは前項で解説したif文の基本的な構文の記述方法と共に、実際に動くサンプルコードを見ながらif文についてさらに理解を深めていきましょう。
まずif文の基本形から、比較演算子や論理演算子の使い方、入れ子(ネスト)した条件分岐の書き方を解説していきます。
if文の基本形
もっとも基礎となるif文の基本となる構文型です。
構文の構造が if [条件式] {条件に当てはまっている際の処理} となるように記述します。次のサンプルコードでは変数aが0であった場合、okの内容を出力しています。結果として、「success」が表示されます。
var a = 0 let ok = "success" let ng = "failure" if a == 0 { print(ok) }
if else の形
条件を追加し、ifの条件に当てはまらない場合はelseの処理を実施する構文です。次のサンプルコードでは、変数aが1である場合はifの処理を実行し、okの内容を出力します。変数aが1以外の場合はelseの処理を実行し、ngの内容を出力します。
このサンプルコードでは変数aは0なのでelseの処理が実行され、「failure」と表示されます。
var a = 0 let ok = "success" let ng = "failure" if a == 1 { print(ok) } else { print(ng) }
if elseif else の形
条件分岐を増やしたい場合、ifの処理の後に続けて、else ifの条件と処理を付け加えることができます。次のサンプルコードでは、変数aが4以下の場合と、6以上の場合、4以下でも6以上でもない場合(=5)で処理を分岐させ、それぞれ異なる文字列を表示します。
このサンプルコードでは変数aは6なので、else ifの処理が実行され、「aは6以上」と表示されます。
var a = 6 if a <= 4 { print("aは4以下") } else if a >= 6 { print("aは6以上") } else { print("aは5") }
else ifが複数の場合
else ifを複数並べることで、条件分岐を増やすことができます。しかし、if文は先頭から条件式を評価して分岐を処理するため、else ifを増やしすぎると処理が重くなることがあります。条件が多くなる場合は異なる記述方法を検討しましょう。
次のサンプルコードでは変数aが10以上、5以上、0以上、aが負である場合で条件を分岐させ、異なる文字列を表示しています。条件式の評価は記述された順に行なわれるので、サンプルコードのような○以上○未満を表現したい場合には、記述する順に気をつけましょう。
このサンプルコードでは変数が3なので、「aは0以上5未満」と表示されます。
var a = 3 if a >= 10 { print("aは10以上") } else if a >= 5 { print("aは5以上10未満") } else if a >= 0 { print("aは0以上5未満") } else { print("aは負の数") }
and や or を使用した複数条件の書き方
論理演算子を使用することで、複数の条件式を組み合わせた複雑な条件の処理が可能になります。
次のサンプルコードではandの論理演算子を使用して、変数aが5以上という条件式と、変数aが2で割り切れる数字であるという条件式の両方を満たす場合、ifの処理を実行します。両方の条件が満たされない場合、elseの処理を実行し、「false」と表示します。
このサンプルコードでは変数aは8であるため、ifのコードが実行され「aは5以上の偶数です」と表示されます。
var a = 8 if (a >= 5 && a % 2 == 0) { print("aは5以上の偶数です") } else { print("false") }
入れ子(ネスト)させる場合の書き方
ifの条件を満たした上で、より細かい条件によって処理される場合を限定するには、ifの処理中にifを入れる、いわゆる入れ子(ネスト)の記述方法を用います。
次のサンプルでは、最初のifで変数aが1以上の場合、さらに変数aを評価し2で割り切れなければ内側のifの処理を実行し、割り切れる場合は外側のifの処理を実行しています。複雑な条件を分岐させて処理する場合、入れ子(ネスト)で記述する方法は頻繁に使用します。
このサンプルコードでは、変数aは9であるため、「aは奇数の自然数」と表示されます。
var a = 9 if a > 0 { if a%2 == 1{ print("aは奇数の自然数") } else { print("aは偶数の自然数") } }
Swift の if文 - 中級編
ifの基本的な使い方を理解したところで、少し実践に踏み込んだ応用的な記述方法を見ていきましょう。if文の代わりに使える三項演算子や、nil判定(if let)の使い方も知っておくと、条件分岐の記述が格段に楽になります。
nilとは値が空である状態を指します。通常Swiftでは、変数に値が入ってないとエラーが出力されます。しかし、オプショナル(optional)型というnil(空)を許容できる変数があります。
このオプショナル型の「値が入っていない」状態を利用したプログラムの記述方法が、三項演算子によるifの記述やnil判定です。
if文の代わりに三項演算子を使う
三項演算子は、基本的にはif...elseの代替と考えて問題ありません。三項演算子の記述には?を用います。注意したい点は、オプショナル型の変数を宣言する場合にも?を使用するため、三項演算子の?を変数名と連続して記述するとエラーの原因になります。三項演算子の?の前には必ずスペースを挿入しましょう。
三項演算子には? と ?? の2種類あり、それぞれに処理が異なります。
?の場合 |
変数に、{条件がtrueのときの値を代入 : 条件がfalseのときの値を代入}という構文が1行で記述できます |
---|---|
??の場合 |
この型は値のnilを見るNil Coalescing Operatorといい、(変数) != nil ? (変数がnilでないときの値)! : {変数がnilのときの値}の省略形です |
それではサンプルコードを詳しく見ていきましょう。次のサンプルではまず、変数sampleに「true」を、オプショナル型の変数を宣言して「Hello world」を代入しています。
続いて、通常の三項演算子でsampleの真偽を評価します。このコードではsampleはtrueなので、左辺の内容が実行され「trueです」と表示されます。
次にnilを見るNil Coalescing Operatorの三項演算子です。variableの評価を行ない、nilであるか否かを見ています。nilであれば「中は空です」を出力しますが、variableには先程「Hello world」が代入されているので処理は行なわれず「Hello world」が出力されます。
let sample = true var variable : String? = "Hello world"//オプショナル変数 // ?の場合 let result1 = sample ? "trueです" : "falseです" print(result1) // ??の場合 let result2 : String = variable ?? "中は空です" print(result2)
if letの書き方
if letはnil判定に使用する構文です。基本形は以下のように記述します。
if let <変数> = <オプショナル型変数> { // <オプショナル型変数>にnilが含まれていない場合の処理 } else { // <オプショナル型変数>にnilが含まれている場合の処理 }
では、サンプルコードを見ていきましょう。ここではオプショナル型の変数bを宣言し、if letでbのnilを判定します。bの中がnilでなければ変数aに代入された変数bの内容を出力します。変数bがnilの場合、elseの処理を行ない「中は空です」と表示します。
var b : Int? if let a = b { print(a) } else { print("中は空です") }
Swift のswitch文との違い
条件分岐にはif文の他に、switch文という記述方法があります。if文はどのような条件でも条件式として設定できますが、可読性が下がってしまうことから、条件があまり多くない条件分岐に適しています。
一方のswitch文は、条件がある程度決まっている際に使用すると、コード全体が見やすく簡潔に記述できます。switch文はif文と異なり、「case [条件式]:処理」というcase文と呼ばれる書き方によって条件分岐を実行します。条件となる値や変数を複数個指定して、一致するcase文を探し、処理を実行するため、一般的にif文よりswitch文のほうが、プログラムの処理が早いと言われています。
前項で解説した三項演算子でも、複雑な条件式を用いる場合はswitch文で記述するほうが、直感的でわかりやすく記述できることがあります。
Swiftの基本であるif文をマスターしよう!
if文はプログラムを構築する上で基礎となるため、習得は必須といえる構文構造です。今回解説したif文の記述方法はその中でも基本となる構文なので、サンプルコードをもとに実際に実行しながら挙動を確認して、if文がどのように処理されていくのかを学ぶとより習得が速いでしょう。
if文をマスターすると、このときは〇〇、違うときは△△といったアルゴリズムを簡単に扱えるようになります。条件分岐を使いこなすことで、格段に読みやすく処理の速いプログラムを記述できるので、ぜひ積極的に使用しながらマスターしていきましょう。