miauのブログ

はてなダイアリー「miauの避難所」をはてなブログに移行しました

if (〜) for (〜) ... って一行に書くのも悪くないかも

WordPress MU の案件をやっていて、MVC の分離がイマイチだったりグローバルな関数/変数に頼ってたりでイマイチなところが多いんですが。ふと目についたこのコード。

if ( is_array($meta) ) foreach ($meta as $key => $value) {
    :
}

こういう if と for を一行に収める書き方は今まで見たことなかったけど、悪くない気がする。このブロックがループであることはひと目でわかりにくくなってしまうけど、

if ( is_array($meta) ) {
    foreach ($meta as $key => $value) {
        :
    }
}

と書くよりもネストが深くならなくていいような。

if の後がブロックになっていないことに反対する意見もありそうだけど、それって elseif/elsif/elif を構造として持たない言語(JavaScript とかが確かそう)で、

if (...) {
    :
} else if (...) {
    :
}

こう書かずに

if (...) {
    :
} else {
    if (...) {
        :
    }
}

こう書けって言ってるのと同じことのような。

もちろん if 内の条件式が複雑な場合は使いたくないけど、最初の例のように for/foreach と直結した条件の場合はむしろ読みやすいと思える。どんなもんでしょ?