読者です 読者をやめる 読者になる 読者になる

特定の値しか許さないんだったらintじゃなくてenum

今日発見したこんなコード。

/// <summary>
/// ほげほげを設定する
/// </summary>
/// <param name="hoge">ほげほげ</param>
/// <param name="location">0:左、1:中央、2:右</param>
public void SetHoge(string hoge, int location)
{
    switch (location) {
        case 0: leftHoge = hoge; break;
        case 1: centerHoge = hoge; break;
        case 2: rightHoge = hoge; break;
        default: return;
    }
}


こんな、特定の値しか許さない場合は、積極的にenumを定義すべき。

/// <summary>
/// ほげほげの位置を表す列挙型。
/// </summary>
public enum HogeLocationKind { Left, Center, Right }

/// <summary>
/// ほげほげを設定する
/// </summary>
/// <param name="hoge">ほげほげ</param>
/// <param name="locationKind">ほげほげを設定する位置</param>
public void SetHoge(string hoge, HogeLocationKind locationKind)
{
    switch (locationKind) {
        case HogeLocationKind.Left: leftHoge = hoge; return;
        case HogeLocationKind.Center: centerHoge = hoge; return;
        case HogeLocationKind.Right: rightHoge = hoge; return;
    }
}


あと、真偽値だけど何を表す真偽値なのかはっきりさせたいだけのときでも、booleanの代わりにenumを定義すべき。

// fileはなんか自分で作ったクラスのオブジェクト
file.Create(@"C:\out.txt", true);   // このtrueは何?
file.Create(@"C:\out.txt", CreateMode.DoNothingIfExists);   // こうなってれば一目瞭然