何时使用常量作为参数而不是魔术值

nic*_*ckf 4 parameters constants

我已阅读(并且普遍同意)为了提高代码易读性,您应该使用常量而不是幻数作为方法参数.例如,使用PHP:

// no constants ////////////////////
function updateRecord($id) {
    if ($id == -1) {
        // update all records
    } else {
        // update record with "id = $id"
    }
}

updateRecord(-1); // future maintainer says: "wtf does -1 do?"
                  // and then has to jump to the function definition

// with constants: /////////////////

define('UPDATE_ALL', -1);

function updateRecord($id) {
    if ($id == UPDATE_ALL) {
        // update all records
    } else {
        // update record with "id = $id"
    }
}

updateRecord(UPDATE_ALL); // future maintainer says: "woot"
Run Code Online (Sandbox Code Playgroud)

是的,这不是一个很好的例子,我知道......

所以,我可以看到这是一个更好的事情,但它提出了你应该多久这样做的问题?如果它适用于每个功能,那么你最终会得到一系列不断定义的公制衬衫.

你会在哪里划线?坚持使用常数而不是魔术数字,或者根据相关功能的使用情况采取混合方式?

Ano*_*on. 5

所以,我可以看到这是一个更好的事情,但它提出了你应该多久这样做的问题?如果它适用于每个功能,那么你最终会得到一系列不断定义的公制衬衫.

如果每个函数都采用"魔术参数",那么你已经做错了.

我会一直使用常量.如果您认为这意味着您有太多常量,那么这只是反映您设计中的其他缺陷.