Tag switch
EnumやUnionの列挙子が増えたときに起こりうる人為的なバグを撲滅したい
こんにちは、@p1ass です。
Enum や Union 型は、取りうる値を列挙する上で非常に便利な構文です。 曜日のようなものを全列挙したり、エラーコードのように本来 string 型として無限の集合だったものを有限の列挙としてアプリケーション側で扱ったりと、様々な用途で使われます。
これらの型は if や switch などの条件分岐やパターンマッチングと共に使われることが多いです。 しかし、これらの処理は列挙子を増えたときに意図しないバグを埋め込んでしまうことも多いです。 そこでこの記事では、Enum と switch を組み合わせたときに人為的に起こしうるバグを紹介しつつ、できるだけ静的にバグを発見するための方法を考えていきます。
先に話をまとめると、この記事に書いてあることは、
default
はできるだけ使わないようにするswitch
式やmatch
式があるプログラミング言語は羨ましい- 上記の構文がない言語では静的解析に頼ろう
になります。
サンプルコードは TypeScript と Rust で書いていますが、これらの言語特有の話をしたいのではなく、一例として挙げています。
1