佐々木屋

技術的なことから趣味まで色々書きます

不要な制御フラグ

制御フラグでの条件分岐はよくある手法の一つですが、これが多くなりすぎると非常に可読性が悪くなります。

課題①

例えば以下のコードを見てみましょう。

int x = 1;
int y = 2;

bool flg = true;
while (flg) {
    if (x * y > 10) flg = false;
    ++x;
    ++y;
}
Dim x As Integer = 1
Dim y As Integer = 2

Dim flg As Boolean = True
While flg
    If (x * y > 10) Then flg = False
    x += 1
    y += 1
End While

変数flgがtrueの間だけ繰り返し処理が実行されますが、制御変数であるflgは本当に必要でしょうか。

リファクタリング

条件で繰り返し処理を抜けるだけに変数を使用するなら、抜ける命令をすれば良いのです。

while (true) {
    if (x * y > 10) break;
    ++x;
    ++y;
}
While True
    If (x * y > 10) Then Exit While
    x += 1
    y += 1
End While


課題②

次のコードはどうでしょうか。

int x = 1;
int y = 2;

bool flg = x * y > 10 ? true : false;
if (flg) {
    //何かの処理
}
Dim x As Integer = 1
Dim y As Integer = 2

Dim flg As Boolean = If(x * y > 10, True, False)
If flg Then
    '何かの処理
End If

計算結果が変数flgに格納されて、その後条件判断に使用されています。

リファクタリング

あまりも長い計算や、処理が複雑で判別に行数を要するような処理は別ですが、特に短く済むような場合はいちいち変数に○×を持つのは無駄ですし、そのまま書いた方が可読性が良くなります。

if (x * y > 10) {
    //何かの処理
}
If x * y > 10 Then
    '何かの処理
End If



癖で何でも変数を作って入れてしまう人もいますが、その変数を作る処理と実際使われる回数であったり場面であったりを考えた時、正直無い方がすっきりすることが多いです。これは変数に限らず関数化でも同じことが言えます。

適切なメンバーを作ることが、見やすい保守しやすいコードの第一歩です。