http://blogs.wankuma.com/rti/archive/2008/11/05/160519.aspx
if 文怖い
の続きです。
行が選択されている場合のみ有効なコマンドがあるとします。
これは、以下のコードのように「行が選択されていればコマンドを有効にする」という考え方ができます。
if (selectedRowCount > 0) {
printButton.Enabled = true;
deleteButton.Enabled = true;
}
else {
printButton.Enabled = false;
deleteButton.Enabled = false;
}
一方で、以下のコードのように「このコマンドが有効な場合は行が選択されている場合である」という考え方もできます。
printButton.Enabled = selectedRowCount > 0;
deleteButton.Enabled = selectedRowCount > 0;
僕は
if 文を使わない
こっちの方を好んで書きます。
また、比較演算を 2 回処理させるのは嫌なので、以下のように書き換えます。
printButton.Enabled = deleteButton.Enabled = selectedRowCount > 0;
でも、更に複雑になる場合は、以下のように目的を明確にします。
var existSelectedRow = selectedRowCount > 0;
printButton.Enabled = existSelectedRow;
deleteButton.Enabled = existSelectedRow;
条件演算子も使いますが、このケースは稀です。
class HogeHoge {
public string Method(int i) {
return
i == 0 ? "A" :
i == 1 ? "B" :
i == 2 ? "C" : string.Empty;
}
else if を繰り返すような書き方はしたことがありません。
switch case も嫌いです。
条件演算子が唯一許せる理由は、流れ制御をしないからです。
オブジェクトを使うことも多いです。
class BaseClass {
public int Value { get; protected set; }
public string Text { get; protected set; }
}
class A : BaseClass {
public A() {
base.Value = 0;
base.Text = "A";
}
}
class B : BaseClass {
public A() {
base.Value = 1;
base.Text = "B";
}
}
class C : BaseClass {
public A() {
base.Value = 2;
base.Text = "C";
}
}
class HogeHoge {
public string Method(BaseClass x) {
return x == null ? string.Empty : x.Text;
}
}
最近は enum を使う場面で、最初から上記を使ってしまうことの方が多くなりました。