LoginSignup
2
0

More than 3 years have passed since last update.

[JavaScript] 高階関数で break する方法の考察

Last updated at Posted at 2020-09-24

概要

  • 高階関数の forEachfor 文と異なり、処理途中で break できません。そこで、代替コードで break できる様にする方法を考えてみました。

  • 書く動機となった元記事
    なぜ我々は頑なにforを避けるのか

実装

  • 高階関数 find
findによるfor-breakの代替コード
;[1, 3, 5, 7].find(
  it => {
    console.log(it)
    return it === 5    // Same as `if (it === 5) break`
  }
)

// 1
// 3
// 5
  • 高階関数 reduce
reduceによるfor-breakの代替コード
;[1, 3, 5, 7].reduce(
  (bye, it) => {
    if (bye) return bye
    console.log(it)
    return it === 5  // Same as `if (it === 5) break`
  },
  false
)

// 1
// 3
// 5
  • 高階関数 some
someによるfor-breakの代替コード
;[1, 3, 5, 7].some(it => {
  console.log(it)
  return it === 5  // Same as `it (it === 5) break`
})

// 1
// 3
// 5
  • 高階関数 every
everyによるfor-breakの代替コード
;[1, 3, 5, 7].every(it => {
  console.log(it)
  return it !== 5  // Same as `it (it === 5) break`
})

// 1
// 3
// 5

まとめ

  • 本来の findreduce, some, every の使い方ではないため、可読性にかなり難があります。
  • これらは本来、代入文の右辺として使われます。右辺に書かれてないなら「本来の使い方ではない」ので、for-break の代替で使われてるのかと気づけそうです。

  • 「他にもっと好い方法があります!」と云う方は、コメント欄で教えて下さい!

2
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0