4

次の2つのコーディングスタイルを検討してください。

ネストされた条件:

if(is_numeric($user_id)) {

    // .. do stuff
    if(is_valid_user($user_id)) {
        return foo($user_id);
    } else {
        return FALSE;
    }

} else {
    return FALSE;
}

対何かが間違っているときに単に停止する:

if(!is_numeric($user_id)) {
    return FALSE;
}    

// .. do stuff

if(!is_valid_user($user_id)) {
    return FALSE;
}

return foo($user_id);

もちろん、これは少なくとも部分的に味に関するものです。しかし、これら2つの異なるスタイルは何と呼ばれていますか?

一方が他方よりも優先されるのはいつですか?

他に、おそらくよりクリーンなコーディングスタイルはありますか?

4

3 に答える 3

1

elseを完全に省略できます。

if (is_numeric($user_id)) {

    // do stuff

    if (is_valid_user($user_id))    
        return foo($user_id);
}

return false;

少しすっきりしていて、コードが少なくても、読みやすく、理解しやすいです。

于 2012-08-09T23:37:45.263 に答える
1

returnあなたの質問に関連する別のコーディングスタイルは、メソッド/関数ごとに1つのステートメントしかないことです。

学校はしばしばこの原則を教えます。マーティン・ファウラーはもともといくつかのオンライン検索に基づいてこれを支持したと思います。

主な理由はおそらくPHPとは無関係ですが、たとえばCでは、クリーンアップが必要な関数に動的にメモリを割り当てた場合、あちこちにリターンがあると、コードが繰り返されたり、メモリリークが発生したり、使用する必要があります。gotoメモリを解放するためのコードを取得します。

于 2012-08-09T23:42:20.753 に答える
1

私は一般的に、ネストが最も少ないものが読みやすいという考えに基づいています。そのため、2番目のスタイルが好きです。もちろん、どのスタイルを使用するかは関係ありません。2番目の例を少し変更して、読みやすくします。

if(!is_numeric($user_id)) return FALSE;

// .. do stuff

if(!is_valid_user($user_id)) return FALSE;

return foo($user_id);

私にとって、右側にreturnステートメントがあると、それらが目立つようになります。また、すべてを1行にまとめることで、ステートメントがゲートであることがわかり、コードをセクションに簡単に分割できます...しかし、それは私だけです。

于 2012-08-09T23:55:34.247 に答える