Posted at

【TIPS】今すぐ `.filter{...}.first` をやめましょう

More than 1 year has passed since last update.

よくこのような構文を見かけたりするのではないでしょうか:

let array: [String] = [

"Apple",
"Boy",
"Cat"
]

let target = array.filter({ $0.hasPrefix("A") }).first
// target == "Apple"

ところがこの書き方、微妙にパフォーマンスが悪い(結果見つかったとしても最後まで回る)のと、微妙に意図が読み取りづらいですね。

Swift には first(where:) というものがありますので積極的にこちらを利用しましょう:

let target = array.first(where: { $0.hasPrefix("A") })

// target == "Apple"

この書き方だと、結果見つかったらループから抜けるのでパフォーマンスが少し良くなるだけでなく、一目で「配列の中の最初の A で始まる単語を返す」ってわかるのでとてもオススメです。

ちなみにインデックスを探すときも同じような書き方でできます:

let targetIndex = array.index(where: { $0.hasPrefix("A") })

// targetIndex == 0