[Swift]「if-else・switch」

iOSアプリ開発において、正しい条件分岐を行うことは重要です。

この記事では、if-else文switch文の基本的な使い方から応用までを詳しく解説します。

目次

(基本編)if-else文とswitch文

Swift言語では、特定の条件に応じて異なる処理を実行するために、if-else文switch文が使用されます。

if-else文の基本

if-else文は、条件が真の場合に一連の処理を実行し、偽の場合に別の処理を実行するために使用されます。

if-else文の基本構文
if 条件 {
    // 条件が真の場合の処理
} else {
    // 条件が偽の場合の処理
}
  • 条件が真の場合は、ifブロック内の処理が実行されます。
  • 条件が偽の場合は、elseブロック内の処理が実行されます。
if-else文のコード例①

「loveCalculator」という関数を作成し、関数内部に次の命令を書きます。

  • 0〜100の乱数を生成し、その値を定数「loveScore」に格納
  • 次の条件文を付加する
    「loveScore」が100の時、「You love each other like Kanye love Kanye」と表示
    「loveScore」が100以外の時、「You’ll be forever alone」と表示
func loveCalculator() {
    let loveScore = Int.random(in: 0...100)
    
    if loveScore == 100 {
        print("You love each other like Kanye love Kanye")
    } else {
        print("You'll be forever alone")
    }
}

loveCalculator()

「loveScore == 100」は100と等しいかどうかという条件文でしたが、他の比較演算子を使って、いろいろなチェックが可能です。

比較演算子の種類
  • == 等しい
  • != 等しくない
  • > より大きい
  • < より小さい
  • >= より大きい または 等しい
  • <= より小さい または 等しい

これらの演算子を使って、コード例①の条件文の内容を変えてみましょう。

if-else文のコード例②

「loveCalculator」という関数を作成し、関数内部に次の命令を書きます。

  • 0〜100の乱数を生成し、その値を定数「loveScore」に格納
  • 次の条件文を付加する
    「loveScore」が80より大きい時、「You love each other like Kanye love Kanye」と表示
    「loveScore」が40から80の時、「You go together like Coke and Mentos」
    「loveScore」が40より小さい時、「You’ll be forever alone」と表示
func loveCalculator() {
    let loveScore = Int.random(in: 0...100)
    
    if loveScore > 80 {
        print("You love each other like Kanye love Kanye")
    } else if loveScore > 40 {
        print("You go together like Coke and Mentos")
    } else {
        print("You'll be forever alone")
    }
}

loveCalculator()

switch文の基本

switch文は、変数や式の値に応じて、異なるケースごとに処理を分岐させるために使用されます。

switch文の基本構文
switch 変数または式 {
case 値1:
    // 値1に対する処理
case 値2:
    // 値2に対する処理
default:
    // 上記のいずれのケースにも該当しない場合の処理
}
  • switchキーワードを使用して変数または式を指定します。
  • caseキーワードを使用して各ケース(値)を指定します。
  • 値が変数や式の値と一致する場合、対応するケースの処理が実行されます。
  • 処理が実行された後、switch文を抜けます。
  • どのケースにも一致しない場合は、defaultキーワード以下の処理が実行されます。

switch文は、ケースごとに複数の文や処理を実行することができます。ケース内の処理が完了した後、自動的にswitch文を抜けるため、break文は必要ありません

簡単な例として、次の関数を作成してみましょう。

switch文のコード例①

数値(整数)を入力すると、対応する曜日を出力するコードを作成します。

func dayOfTheWeek(day: Int) {
  switch day {
      case 1: print("Monday")
      case 2: print("Tuesday")
      case 3: print("Wednesday")
      case 4: print("Thursday")
      case 5: print("Friday")
      case 6: print("Saturday")
      case 7: print("Sunday")
      default: print("Error")
  } 
}

次に、「if-else文のコード例②」の内容をswtch分に置き換えて比較してみましょう。

条件が少ない場合は、if文、switch文どちらを使ってもあまり違いはないが、条件が多い場合は、switch文を使用する方が効率的でコードの実行速度も速くなります。

switch文
func loveCalculator() {
    let loveScore = Int.random(in: 0...100)
    
    switch loveScore {
    case 81...100:
        print("You love each other like Kanye love Kanye")
    case 41..<81:
        print("You go together like Coke and Mentos")
    case ...40:
        print("You'll be forever alone")
    default:
        print("Error lovescore is out of range.")
    }
}

loveCalculator()

(応用編)if-else文とswitch文

if-else文を使った複数条件をチェック

複数の条件をチェックするためには、if-else文を活用することができます。これにより、複数の条件に基づいた処理を柔軟に実装することができます。以下に、if-else文を使った複数条件の活用方法を解説します。

複数の条件をチェックする場合、if文を連結させることができます。これにより、異なる条件に応じて処理を実行することが可能です。

以下は、その例です。

コード例
if 条件1 && 条件2 {
    // 条件1と条件2が両方とも真の場合の処理
} else if 条件3 || 条件4 {
    // 条件3または条件4のどちらかが真の場合の処理
} else {
    // 上記の条件に該当しない場合の処理
}
  • 最初に条件1と条件2が両方とも真であるかをチェックしています。
  • もし条件1と条件2が両方とも真の場合、そのブロック内の処理が実行されます。
  • 次に、else ifキーワードを使用して、条件3または条件4のどちらかが真であるかをチェックしています。
  • もし条件3または条件4のいずれかが真である場合、そのブロック内の処理が実行されます。
  • 最後に、どの条件にも該当しない場合は、elseブロック内の処理が実行されます。

このように、複数の条件をチェックすることで、プログラムの挙動を細かく制御することができます。

また、条件の組み合わせには論理演算子を活用することもできます。論理演算子は、複数の条件を組み合わせて評価し、真偽の結果を返します。

  • 条件1 && 条件2
    条件1と条件2が両方とも真である場合に真を返します。
  • 条件3 || 条件4
    条件3または条件4のどちらかが真である場合に真を返します。

次に、これまでの理解度を確認するため、閏年(うるう年)を判定する関数を作成してみましょう。

応用問題(閏年を判定する関数)

閏年の条件は以下の通り。

  • 西暦年号が4で割り切れる時 → 閏年
  • 例外として、西暦年号が100で割り切れて、400で割り切れない年は平年とする
func isLeap(year: Int) {
  
  if (year % 4 != 0 || (year % 100 == 0 && year % 400 != 0)) {
     print("NO")
    } else {
        print("YES")
    } 
}

switch文のフォールスルー

Swift言語では、switch文を使用して複数のケースを処理する際に、フォールスルーfallthrough)という機能を活用することができます。

フォールスルーは、あるケースの処理が終了した後に次のケースの処理も実行するという動作を指します。

以下では、switch文のフォールスルーの使い方について詳しく解説します。

通常、switch文では、各ケースの処理が終了すると、自動的にswitch文全体が終了します。しかし、フォールスルーを使用すると、あるケースの処理が終了した後でも、次のケースの処理を実行することができます。これにより、複数のケースをまとめて処理する場合に便利です。

フォールスルーを使用するには、ケースの最後にfallthroughキーワードを記述します。

以下は、フォールスルーを活用したswitch文の例です。

コード例:fallthrough
switch 値 {
case パターン1:
    // パターン1に一致する場合の処理
    fallthrough
case パターン2:
    // パターン2に一致する場合の処理
    fallthrough
case パターン3:
    // パターン3に一致する場合の処理
default:
    // どのパターンにも一致しない場合の処理
}
  • パターン1のケースの処理が終了すると、fallthroughキーワードにより次のケースの処理が実行されます。
  • パターン2のケースの処理が終了すると、再びfallthroughキーワードにより次のケースの処理が実行されます。
  • パターン3のケースでは、fallthroughキーワードは必要ありません。

フォールスルーを使うことで、似た処理を複数のケースで共有したり、特定の条件に応じて複数のケースをまとめて処理したりすることができます。

しかし、フォールスルーは注意が必要です。処理の流れを意図的に制御するため、不用意に使用すると予期しないバグを引き起こす可能性があります。必要な場合にのみ、慎重に使用するようにしましょう。

Enum型とswitch文の組み合わせ

Enum型switch文を組み合わせることで、より高度な条件分岐を実現することができます。

Enum型は、特定の値の集合を表現するためのデータ型であり、switch文はその値に応じて処理を分岐するための制御構造です。以下では、Enum型switch文を組み合わせて活用する高度な方法について詳しく解説します。

まず、Enum型を定義する方法を確認しましょう。

Enum型は、関連する値を一つの型でまとめることができます。値は各ケース(case)として定義され、それぞれが一意の識別子を持ちます。

以下は、Enum型の定義例です。

定義例:Enum型
enum データ型 {
    case ケース1
    case ケース2
    // 他のケース
}

次に、Enum型switch文を組み合わせて活用する方法について考えてみましょう。Enum型の各ケースは、switch文のケースとして使用することができます。これにより、Enum型の値に応じて処理を分岐することができます。

以下は、Enum型switch文を組み合わせた高度な活用法の一例です。

活用例:Enum型switch文を組み合わせ
enum Fruit {
    case apple
    case banana
    case orange
}

let selectedFruit = Fruit.apple

switch selectedFruit {
case .apple:
    print("Selected fruit is apple.")
case .banana:
    print("Selected fruit is banana.")
case .orange:
    print("Selected fruit is orange.")
}

//出力結果: 
Selected fruit is apple.
  • FruitというEnum型を定義し、選択されたフルーツを示すselectedFruitという変数に.appleを代入しています。
  • switch文を使用してselectedFruitの値に応じて処理を分岐しています。
  • 各ケースはEnum型のケースと一致した場合に、適切なメッセージが出力されます。

この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次