コーディングスタイル
んー、私は right brace の右側に else が来る必要を特に感じないので、
if (cond) { // cond is true } else { // cond is not true }
かなぁ。Effective Perl にも無駄につめるなとか書いてなかったっけ。まぁ、do while の while は brace と別行に分けるとさすがにきついので同じ行に書くけど。
むしろ、スペーシングの感覚が異なるソースを見るとぎょっとするかな。以前も書いたけどこうゆうの。
<?php for( $i=0; $i<count ($array); $i++ ){ // do something } ?>
なんでことごとく私の逆を行くのかと。
あと、TAB幅8、インデント幅2、left brace は独立行にしないっていういかにも「Emacsの標準設定で書いたけど GNU style で書く気は無い」ソースに出会うとちょっとげんなりしたり。もうみんな GNU style でいいんじゃね。
で話変わって、do { } while (0); の話(do while - 神様なんて信じない僕らのために)なんだけども。PHP では goto もないし、finally もないから終了処理に記述に使えるという話が LL Magazine にのっていた気がする。
例えばこういうのな。
<?php function func($dsn) { do { $db = DB::connect($dsn); if (PEAR::isError($db)) { $ret = $db; break; } $rs = $db->query('SELECT * FROM users'); if (PEAR::isError($rs)) { $ret = $rs; break; } $data = array(); while ($row =& $rs->fetchRow()) { $data[] = $row; } $ret = $data; } while (0); if (isset($db) and !PEAR::isError($db)) { $db->disconnect(); } } ?>
例外処理が無いゆえに Python やら Ruby やらを使っている人にとってはとってもアレな感じのコードなわけだけど、まぁ、そのへんは PHP4 だしね。で、PHP5 は例外処理があるから大丈夫だろと思っていたら finally はサポートされてなかったりするようでなにそれと思ったり。