ぷっぽプログラミング備忘録

linux, javascript, php, C#, そのうちScalaとかアプリ開発とかやってみたいです。

老兵の愚痴

1. メソッド名の動的生成はダメ絶対

例)

$methodName = 'aiueo';

 

if ($parameter == 1) {

   $methodName .= 'Ver1';

} else {

   $methodName .= 'Ver2';

}

 

$methodName();

 

理由) 影響範囲調査するときなどでgrepでひっかからずに漏れる。そして致命的エラーにつながる。

 

=====================================

2. 数値や文字列のユニークなキーなどはなるべく、素のままで扱い、表示用装飾は最後にする。ビジネスロジックのメソッド内での装飾はなるべく避ける。

 

例)

// 誤ったバージョン✖
function getShopStopDays() {

    $stopDays = ;
    ...なんやかんやで店の定休日などのロジックで求めるときに、'月'とか'日'とかをつけてしまう…
    $stopDays
= $year.'年'.' '.$month.'月.$day.'日';
    ...なんやかんや
     return $stopDays;

}

// 正しいバージョン〇
function getShopStopDays() {

    $stopDays = ;
    ...なんやかんやで店の定休日などのロジックで求めるときに、'月'とか'日'とかつけない
   $stopDays
= ['year'=>$year, 'month'=>$month, 'day' => $day];
   ...なんやかんや
   return $stopDays;

}

 

=====================================

 3. 概念が同じものには同じ英単語をなるべく使う(理想論)

これはさすがに完璧には無理だと思いますが、あくまで理想として…。

 

// 誤ったバージョン✖

class Hoge {

    public function sono1() {

         $books = '予約の意味';

    }

 

    public function sono1() {

         $reserves = '予約の意味';

    }

}

 

// 正しいバージョン〇

class Hoge {

    public function sono1() {

         $reserves = '予約の意味';

    }

 

    public function sono1() {

         $reserves = '予約の意味';

    }

}

 

=====================================

 3. ループは複数回してもいいので、処理の単位でまとめる

// 誤ったバージョン✖

function fooNG($dataList) {
    foreach ($dataList as $key => $data) {
        // 変な文字列だったら空にする
        if ($data['name'] == '--') {
            $data['name'] = '';
        }

        // 他の処理
        if ($key == 1) {
            keyOneMethod($data);
        } elseif ($key == 2) {
            keyTwoMethod($data);
        }
    }
}

//正しいバージョン

function fooOK($dataList) {
    // 変な文字列だったら空にする
    foreach ($dataList as $key => $data) {
        if ($data['name'] == '--') {
            $data['name'] = '';
        }
        $dataList[$key] = $data;
    }


    // 他の処理
    foreach ($dataList as $key => $data) {
        if ($key == 1) {
            keyOneMethod($data);
        } elseif ($key == 2) {
            keyTwoMethod($data);
        }
    }
}

=====================================

 4. (基本中の基本だが)1つの変数には、1つの意味を込める。1つの変数にさまざまな意味を込めない。

誤ったバージョン

    function getPriceNG() {
        $price = 0;
        
        if (...) {
            $price = false; // "料金"という変数にフラグ…だと?!!
        }
        
        return $price;
    }
    
    $price = $this->getPriceNG();
    if ($price === false) {
        // なんやかんや特別な処理
    } else {
        // 通常の処理
    }

正しいバージョン

    // もっというなら、フラグを算出するメソッドを別にすべきだが…
    function getPriceOK() {
        $price = 0;
        $isFooFlag = true; // 実際の現場ではちゃんとした名前にします
        
        if (...) {
            $isFooFlag = false;
        }
        
        return [$price , $isFooFlag];
    }
    
    list($price, $isFooFlag) = $this->getPriceOK();
    if ($isFooFlag === false) {
        // なんやかんや特別な処理
    } else {
        // 通常の処理
    }