🍃このブログは移転しました。
3秒後、自動的に移動します・・・。

ラベル付き文でif文をbreakする

っていう使い方もあるのか〜と久々に学びがあったのでメモ。

ラベル付き文

こんな風に、`for`とかループに好きな名前をつけられる。

outer:
for (const item of items) {
  inner:
  for (const child of item.children) {
    // ...

    if (cond) continue outer;

    // ...
  }
}

「内側のループにいる時に、外側もろとも`break`したり`continue`したりしたい」場合に便利なやつ。

で、このラベルはループにだけつけられると勝手に思い込んでたけど、実は・・!

if文にもラベル

よくよく考えると、ラベル付き"文"なので、それが文であればラベルを付けられる!そして`if`もれっきとした"文"だった。

というわけで、こんな風に使える。

outer: if (cond1) {
  // ...

  if (cond2) break outer;

  // ...
}

という感じで、特定の場合に`if`文の処理を途中でやめられる!
`return`だと関数ぜんぶ終了しちゃうし、別の関数に分けるのもスコープがアレやし、という場合に便利なやつ。

ほかの文でも使えるけど、使いたくなる機会があるかどうかは不明。

あとはTerserとか通すと、単純な`return`が`return void(...)`みたく気を利かせて処理されてしまうことがあって、そうなると一文字のラベルをつけて`break`するほうが、トータルで1Bくらい軽くなるとのこと・・w

preact/props.js at 7e33abd70ceb32f19e82c281e6b4d35091920f6a · preactjs/preact · GitHub