こんにちは、コン(@pippi_kon)です。
Swiftのswitch文は、C言語やJavaのswitch文ではできなかったことが簡単にできます。
どんなことができるのか、ソースコード・実行結果とともにまとめてみました!
この記事では、『Swiftにおけるswitch文の便利な使い方』についてご紹介します。
switch文とは
switch文とは、変数や式の値に応じてプログラムの分岐処理を行う構文です。
分岐処理を行えるものとしては他にif文がありますが、このif文との最大の違いは「処理を多数に分岐させることができる」という点です。
if文は、条件式について「真か偽か」「YESかNOか」といった2パターンの分岐しかできません。
そのため、3パターン以上の処理に分岐させたい場合はif文(またはelse if文)を複数書かなくてはならず、コードの見た目もごちゃごちゃしてしまいます。
一方switch文は、条件式について「結果が1の場合、2の場合、3の場合、…、それ以外の場合」といった複数パターンの分岐が可能です。
case文でパターンを列挙することができるのでコードの見た目もスッキリします。
switch文の書き方
switch文の書き方は以下の通りです。
switch 値や式 { case 値1: // 値1の処理 case 値2: // 値2の処理 case 値3: // 値3の処理 default: // それ以外の処理 }
switchの後ろに判定の条件式となる値や式を記述します。
分岐処理はcase文で振り分けます。
いずれのcaseにも合致しないパターンはdefault文で処理します。
C言語やJava言語では、case文で処理を記述した後にbreak文を記述する必要がありました。
breakがないと下にある別パターンの処理まで実行されてしまうためです。
しかし、Swiftではbreak文は不要なんです!
breakがなくてもcase文の処理が終わると自動で処理を完了してくれます。
別パターンの処理を継続して実行したい場合はfallthrough文を記述します。
switch文の使い方
それでは、switch文の便利な使い方についてご紹介します!
基本的な使い方
まずは基本的な使い方についてです。
サンプルプログラム
let a = 1 + 2 switch a { case 1: print("aは1です") case 2: print("aは2です") case 3: print("aは3です") default: print("aは1でも2でも3でもありません") }
実行結果
aは3です
プログラムの説明
switch文の基本パターンです。
変数aに計算結果を代入し、変数aの値に応じて処理を振り分けています。
文字列の条件を指定
Swiftのswitch文は文字列も扱えます。
サンプルプログラム
let s = "ABC" switch s { case "AB": print("sはABです") case "ABC": print("sはABCです") case "ABCD": print("sはABCDです") default: print("sはそれ以外です") }
実行結果
sはABCです
プログラムの説明
変数sに文字列「ABC」を代入し、変数sの値に応じて処理を振り分けています。
下のパターンと処理合流(fallthrough)
case文の処理内にfallthrough文を記述することで、次のcase文の処理を実行(処理合流)できます。このことをフォールスルーと言います。
C言語やJava言語のbreak文無しパターンと同等です。
サンプルプログラム
let a = 1 switch a { case 1: fallthrough case 2: print("aは1か2です") case 3: print("aは3です") default: print("aは1でも2でも3でもありません") }
実行結果
aは1か2です
プログラムの説明
「case 1」の処理にfallthrough文を記述しました。
これによりaが1の場合は「case 1」と「case 2」の両方の処理が実施されます。
処理をまとめられるので便利ですが、多用は禁物。
switch文はcase文単位で処理を振り分けるのが基本です。
フォールスルーを多用するとこの基本が崩れてしまうため、考慮漏れや見落としなどの余計なバグを生み出す恐れがあります。
複数の条件を指定
case文には複数の値を指定できます。
fallthrough文で処理をまとめるよりかは多少見やすいと思われます。
サンプルプログラム
let a = 4 switch a { case 1: print("aは1です") case 2: print("aは2です") case 3,4: print("aは3か4です") default: print("aはそれ以外です。") }
実行結果
aは3か4です
プログラムの説明
上から3つ目のcase文を複数条件にしています。
これによりaが3または4の場合に「case 3,4」の処理が実施されます。
範囲の条件を指定
case文に範囲条件を指定することが可能です。
サンプルプログラム
let a = 15 switch a { case (1...10): print("aは1〜10です") case (11...20): print("aは11〜20です") case (21...30): print("aは21〜30です") default: print("aはそれ以外です。") }
実行結果
aは11~20です
プログラムの説明
case文に「(数値1…数値2)」と指定することで範囲での条件分岐が可能です。
この例では「1〜10の場合」「11〜20の場合」「21〜30の場合」というパターンになっています。
変数aの値は15なので「case (11…20)」の処理が実施されます。
「(数値1…数値2)」の「…」は閉区間と呼ばれる区間演算子で、数値2を含む範囲という意味です。
言い換えると「数値1以上数値2以下」となります。
区間演算子にはもう一つ「..<」と記述する半開区間と呼ばれるものがあり、これは数値2を含まない範囲という意味です。
言い換えると「数値1以上数値2未満」となります。
タプルを指定
Swiftのswitch文はタプルを使用した条件分岐も可能です。
サンプルプログラム
let s = ("ABC", "DEF") switch s { case ("ABC", ""): print("sはABCです") case ("", "DEF"): print("sはDEFです") case ("ABC", "DEF"): print("sはABC,DEFです") default: print("sはそれ以外です") }
実行結果
sはABC,DEFです
プログラムの説明
タプルとは順序付けられた複数データの集合体のことです。
switch文でタプルを使用すると複数の値の組み合わせで処理を分岐できます。
この例ではデータ「”ABC”」と「”DEF”」の集合を変数sとして定義しています。
各case文はそれぞれ「”ABC”と空文字」「空文字と”DEF”」「”ABC”と”DEF”」の集合を判定しており、今回パターンマッチするのは「”ABC”と”DEF”」となります。
最後に
今回は、『Swiftにおけるswitch文の便利な使い方』についてご紹介しました。
- 基本的な使い方
- 文字列の条件を指定
- 下のパターンと処理合流(fallthrough)
- 複数の条件を指定
- 範囲の条件を指定
- タプルを指定
Swiftのswitch文は、C言語やJava言語などではできなかったようなさまざまなことが簡単にできてしまいます。
普段、if文で処理を振り分けている方は、これを機会にswitch文を活用されてみてはいかがでしょうか。