趣味のプロジェクトでの思考実験として、私はこの種の微妙なバグ/タイプミスが起こらないようにする方法を考えていました:
public void MyMethod(int useCaseId)
{
// Do something with the useCaseId
}
public void SomeOtherMethod()
{
int userId = 12;
int useCaseId = 15;
MyMethod(userId); // Ooops! Used the wrong value!
}
コンパイル時にエラーが発生しないため、このバグを見つけるのは難しく、実行時に例外が発生するとは限りません。「予想外の結果」が得られるだけです。
これを簡単な方法で解決するために、空の列挙型定義を使用して実験しました。ユーザー ID を効果的にデータ型にする (クラスや構造体にまでは行かない):
public enum UseCaseId { // Empty… }
public enum UserId { // Empty… }
public void MyMethod(UseCaseId useCaseId)
{
// Do something with the useCaseId
}
public void SomeOtherMethod()
{
UserId userId = (UserId)12;
UseCaseId useCaseId = (UseCaseId)15;
MyMethod(userId); // Compile error!!
}
どう思いますか?