先日、うちの会社に持ち込まれたコードを眺めていたら、大量に enum と switch が使われていました。
僕は、何でもオブジェクトにするので
enum と switch 文
を書くことが殆どありません。
しかし、人の書いたコードを見ると、思った以上に enum やswitch 文の使用が目立ちます。
例えば、次の2つの記述パターンがあった時、僕は迷わず後者を選択します。
皆さんは、どちらの方法を使いますか?
~enum と switch による処理~
enum Signal { Red, Blue, Yellow };
class Hoge {
public void Fuga() {
var signal = Signal.Red;
DisplayTitle(signal);
Action(signal);
}
public void DisplayTitle(Signal signal){
switch(signal) {
case Siglal.Red: Console.WriteLine("赤"); break;
case Signal.Blue: Console.WriteLine("青"); break;
case Signal.Yellow: Console.WriteLine("黄"); break;
}
}
public void Action(Signal signal){
switch(signal) {
case Siglal.Red: Console.WriteLine("急いで進む"); break;
case Signal.Blue: Console.WriteLine("堂々と進む"); break;
case Signal.Yellow: Console.WriteLine("注意して進む"); break;
}
}
}
~object 化~
class Hoge {
void Fuga() {
var signal = Signal.Blue;
signal.DisplayTitle();
signal.Action();
}
}
class Signal {
public string Name { get; protected set; }
public string Title { get; protected set; }
public virtual void Action() {}
public void DisplayTitle() { Console.WriteLine(this.Title); }
private static Signal _Red = new SignalRed();
public static Signal Red{ get{ return _Red; }}
private static Signal _Yellow = new SignalYellow();
public static Signal Yellow { get{ return _Yellow; }}
private static Signal _Blue = new SignalBlue();
public static Signal Blue{ get{ return _Blue; }}
}
class SignalRed : Signal {
public SignalRed() {
this.Name = "Red";
this.Title = "赤";
}
public override void Action() {
Console.WriteLine("急いで進む");
}
}
class SignalYellow : Signal {
public SignalYellow() {
this.Name = "Yellow";
this.Title = "黄";
}
public override void Action() {
Console.WriteLine("注意して進む");
}
}
class SignalBlue : Signal {
public SignalBlue() {
this.Name = "Blue";
this.Title = "青";
}
public override void Action() {
Console.WriteLine("堂々と進む");
}
}