Python 3.10から導入された新機能、match文。このmatch文は、if文のような使い方ができますが、その使い方には注意が必要です。
まず、match文の基本的な書き方を見てみましょう。
match 変数:
case パターン1:
return 返り値1
case パターン2:
return 返り値2
case _:
return 例外処理
このように書いたとき、変数がパターン1であれば返り値1、パターン2であれば返り値2、それ以外の値であれば例外処理の結果が返ってきます。
しかし、match文の中でbreakを使うとどうなるでしょうか。一般的に、breakは現在のループを終了し、そのループの直後の次の文から実行を再開します。しかし、match文の中でbreakを使うと、matchケースだけでなく、イベントループも終了してしまいます。
これは、match文の中では、計算処理を入れることができないためです。例えば、i + 1といった処理を入れることはできません。
したがって、match文の中で早期にbreakをしたい場合は、例外を使ってエミュレートすることができます。
class _MyBreak(Exception):
pass
foo = 5
bar = 3
try:
match foo:
case 5:
if bar > 1:
print("about to break")
raise _MyBreak()
print("not reached")
case 42:
pass
except _MyBreak:
pass
このように、Pythonのmatch文とbreakの使い方を理解し、適切に使用することで、より効率的なコードを書くことができます。