« vi + ctags : 関数等の定義位置にジャンプ | メイン | 「2流のテスター」は要らない!(1) »

インデントをなるべく浅くするテクニック
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

こんにちは satoです。

インデントが浅いと、コードが見やすいです。
インデントが浅くなりそうなテクニックを紹介します。
時と場合にもよりますし、賛否両論もあると思いますが、寛大な目でみてやってください。

1)処理の判定は正常じゃない場合を書く

 //before
 $data = getdata();
 if ($data) {
  なんか複雑な処理;
 } else {
  return false;
 }
 //after
 $data = getdata();
 if (!$data) {
  return false;
 }
 なんか複雑な処理;

2) array か どうかを判断する場合は array にして処理をする

 //before
 if (is_array($args)) {
  foreach() ...
 } else {
  ....
 }
 //after
 if (!is_array($args)) {
  $args = array($args);
 }
 foreach ...

3) 単純な代入が伴うif文には 三項演算子を使う

 //before
 $data = getdata();
 if (isset($data['id'])) {
  return $data['id'];
 }
 return false;
 //after
 return isset($data['id']) ? $data['id'] : false;

4) forの中での特別処理は continue を使用する

 //before
 foreach ($value as $v) {
  if ($v % 2 == 0) {
   複雑な処理;
  }
 }
 //after
 foreach ($value as $v) {
  if ($v % 2 == 1)
   continue;
  複雑な処理;
 }

5) 複数条件の if は switch で書く

 //before
 if ($v == 'A' || $v == 'AB'  || $v = 'B') {
  処理1;
 }
 else if ( $v == 'O') {
  処理2;
 } 
 else {
  処理3;
 }
 //after
 switch($v) {
 case 'A':
 case 'AB':
 case 'B':
  処理1;
  break;
 case 'O'
  処理2;
  break;
 default
  処理3;
  break;
 } 

他にもナイスなアイディア募集中です!

トラックバック

このエントリーのトラックバックURL:
http://www.unoh.net/mt32/mt-tb.cgi/272

この一覧は、次のエントリーを参照しています: インデントをなるべく浅くするテクニック:

» インデントをなるべく浅くするテクニック from akiyan.com Blog
ウノウラボ Unoh Labs: インデントをなるべく浅くするテクニックより。 処理の判定は正常じゃない場合を書く array か どうかを判断する場合は... [詳しくはこちら]

コメント

>インデントをなるべく浅くするテクニック

「1TABにする」ってボケようと思ったら、とっくに1TABになってるよこのシト!っていうのは卑怯だと思いますプンプン。

初めまして。
僕は2)のケースはいつもこうやってますが、どうでしょう。

foreach ((array)$args as $a){
....
}

akkun_choi さん,

$args がオブジェクトのとき,
(array)$args と array($args) では,結果が違ってしまいます.

また,
foreach (array($args) as $v)
とすると $args が array のときに,array の array になってしまうので, 2)のケースのように事前に is_array() で確認しなければならないと思います.

オブジェクトを配列にキャストすると、オブジェクトを元にした配列になってしまうのですか。それは知りませんでした。

$argsが配列になるべきところを、nullかスカラーであってもforeachが動くように…という場合に使ってたのですが、注意が必要ですね。

コメントを投稿


画像の中に見える文字を入力してください。