ふと思ったったー

仕事で先日書いたコードにコメント書き足していてふと思ったんですが、
A|Bな真偽値と1|2な真偽値の組み合わせの条件文ってどう書きますか?

// case.1
if (A && 1) {
    BLOCK1
} else if (A && 2) {
    BLOCK2
} else if (B && 1) {
    BLOCK3
} else if (B && 2) {
    BLOCK4
}

シンプルに書くとこうなりますね。でも、elseがないのが残念です

// case.2
if (A && 1) {
    BLOCK1
} else if (A && 2) {
    BLOCK2
} else if (B && 1) {
    BLOCK3
} else {
    BLOCK4
}

elseにしてみました。でも、このelseは何者?って感じですね

// case.3
if (A && 1) {
    BLOCK1
} else if (A && 2) {
    BLOCK2
} else if (B && 1) {
    BLOCK3
} else if (B && 2) {
    BLOCK4
} else {
    // oops...something wrong
}

elseを追加してみました、でも、elseに入ってくる時点でおかしいですね

// case.4
if (A) {
    if (1) {
        BLOCK1
    } else {
        BLOCK2
    }
} else {
    } if (1) {
        BLOCK3
    } else {
        BLOCK4
    }
}

Bと2が条件に明記されてない上にレキシカルスコープとか考えちゃいますね

// case.5
if (A && 1) {
    BLOCK1
} else if (A) {
    BLOCK2
} else if (1) {
    BLOCK3
} else {
    BLOCK4
}

最初に書いてた条件文がコレ
コメント書いてる途中で、新卒の人間が保守ったりって考えると不親切?
とか思って、何人かに聞いてみたわけですが、仕事コードだと
どれが最適なんでしょう?
20111112追記: case.n、s/EXPR/BLOCK/