2024/04/30追記
下記の記事にもある通り、 NotImplementedError
は役割として適切ではないようです。
NoMethodError
などStandardErrorを継承したエラーを状況にあわせて適切に選択するのが良さそうです。
---追記ここまで---
下記の実装を見てください。
type1、またはtype2の2種類のタイプを持つhogeインスタンスがあり、タイプごとに処理を分岐しています。
case
when hoge.type1?
# type1の処理
when hoge.type2?
# type2の処理
end
タイプが2種類なのでこの実装で問題はないのですが、私はこういう分岐のelseにraise NotImplementedError
を書いておくことが多いです。
case
when hoge.type1?
# type1の処理
when hoge.type2?
# type2の処理
else
raise NotImplementedError
end
こうしておくと何が良いのか?
のちにtype3というタイプが増えたとします。
その時にtype3のテストパターンを追加すると思いますが、type3の場合はelseに入るためここを修正しないとテストが必ず落ちます。
最初の実装ではcase文がスルーされるのでテストの書き方次第ではここを修正しなくてもテストが成功してしまうかもしれません。
コードベースの大きなプロダクトでは、隅々まで影響範囲を調べるのは難しく、見落としてしまうことが多々あります。
そういう時に、後者の実装のようにテストで機械的に見つけやすくしておくことで、実装漏れを防ぎやすくなります。
おまけ: NotImplementedErrorとは?
現在のプラットフォームで実装されていない機能が呼び出されたときに発生します。