昔書いたif文中の条件文が見づらい

仕事で過去に書いていたソースコードをドキュメント化する必要が生じ、昔書いたソースコードを見なおしてドキュメント出力用のコメントを付け足していってるのだけど、いろいろとひどい。
いろいろひどい点はあるのだけれども、特にif文中の条件文がところどころ見づらい(醜い)。
例えば下記のような感じ。

if( ((a > b) && (c || d)) || e ){
  // 処理
}

変数名は異なるけど、こんな感じの書き方だった。とりあえず、なんとか何をしたいのか分かったものの、正直見づらい。ただ、今の自分でもどうやったらもっとうまく分かりやすくかけるかも思いつかないし、今でもこうしてしまう時があるので今でも過去の自分に怒る立場ではない。

例えば、先日、コードのネストを深くするな | anoparaというページを見たのだけれども、この中のisValidという関数、自分なら多分、下記のように書いてしまう。

public bool isValid(Data a)
{
    if ( (a != null) && (a.Count > 0) && (a.Error == null) && (a.Result != null) ){
        return true;
    }
    return false
}

今思ったけど、最初に書いたコードだけど、関数化すれば少しはマシになるかもしれない。例えば、下記のような感じで。

bool CheckCondition(int p1, int p2, bool p3, bool p4, bool p5)
{
	if( p1 > p2 ){
		if( p3 || p4 ){
			return true;
		}
	}
	if(p5){
		return true;
	}
	return false
}

if( CheckCondition( a, b, c, d, e ) ){
  // 処理
}

うーん。ちょっとだけマシになったような気もするけど・・・。まだ何かダメな気も・・・。こういう複雑な条件文の解決策って何かないもんだろうか・・・。

それ以前に、ここまで複雑な条件にする必要があるのかどうかをまず考えなおす必要があるのかもしれないですね。ただ、上記のeとかは仕様変更に伴い、後で増えた変数なんですが・・・。

コメント

タイトルとURLをコピーしました