for_whereの使い方

注意: この記事は1年以上前に掲載されたものです。情報が古い場合がありますのでお気を付け下さい。

SwiftはObjective-Cからかなりより新しいコードの書き方が提唱された一方、なおかつC言語に由来するレガシーな書き方を排除する傾向にあり、Swift 3ではそれが推し進められた形となった。さて、今回はSwiftで使われるであろうfor_whereの使い方について説明をしたい。

for_whereは、SwiftLintのルールがさらに厳しくなったでも軽く取り上げたが、forループでも、配列の範囲ベースのものを使う時に、その配列内の要素が特定の条件にマッチしている時のみに処理するという時に推奨されるものである。例えば、以下のようなコードがあったとする。

let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for num in arr {
    if num > 5 {
        print("\(num) is greater than 5")
    }
}

これは、配列内の要素が5より大きければ「(数字) is greater than 5」と表示するプログラムだが、Swiftにおいては、より簡潔に書ける方法がある。

サンプルは以下の通りである。

let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for num in arr where num > 5 {
    print("\(num) is greater than 5")
}

こうすることによって、コードの記述量を減らすことができる。

なお、for_where文は以下のような時は使えない。

let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for num in arr {
    if num > 5 {
        print("\(num) is greater than 5")
    } else {
        print("\(num) is not greater than 5")        
    }
}

上記のケースは条件に合致しない時の処理も行なっているからである。

なお、SwiftLintでは、for_whereの部分で融通の利かない部分があり、型変換などの処理が入っている時にもfor_where絡みの警告が出てきてしまう時がある。その場合は無理に対処するのは適切とは言い難いだろう。

タイトルとURLをコピーしました