Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Coding style 布尔参数-我应该命名它们吗?_Coding Style - Fatal编程技术网

Coding style 布尔参数-我应该命名它们吗?

Coding style 布尔参数-我应该命名它们吗?,coding-style,Coding Style,所以我遇到了一些代码,读起来像这样: checkCalculationPeriodFrequency("7D", "7D", SHOULD_MATCH); 及 让我们不必担心代码现在(或者实际上永远)做了什么,而是让我们担心最后一个参数——应该匹配和不应该匹配 这是我以前想过的事情,但思考可能是“坏”的(因为“坏”在后现代世界中有任何真正的意义) 上面声明了这些值(正如您可能假设的): 我记不起读过关于“命名”传递给方法调用的布尔参数以简化可读性的文章,但它肯定是有意义的(为了可读性,但是它也

所以我遇到了一些代码,读起来像这样:

checkCalculationPeriodFrequency("7D", "7D", SHOULD_MATCH);

让我们不必担心代码现在(或者实际上永远)做了什么,而是让我们担心最后一个参数——应该匹配和不应该匹配

这是我以前想过的事情,但思考可能是“坏”的(因为“坏”在后现代世界中有任何真正的意义)

上面声明了这些值(正如您可能假设的):


我记不起读过关于“命名”传递给方法调用的布尔参数以简化可读性的文章,但它肯定是有意义的(为了可读性,但是它也隐藏了值是什么,如果只是一点点的话)。其他人发现这是instagram之类的风格吗?所以facebook?

这确实是为了可读性。这个想法是函数调用的读者可能不会立即知道函数调用中的值
true
的含义,但是
应该匹配
会立即传达含义(如果您需要查找实际值,您可以不费吹灰之力地查找)

如果在函数调用中有多个布尔参数,则更容易理解:哪个
true
表示什么


该逻辑的下一步是为参数值创建命名对象值(例如,通过enum):您不能将错误的值传递给函数(例如,在三个布尔参数的示例中,没有任何东西可以阻止我为所有参数传递
应该匹配
,即使它在语义上对该函数没有意义)

checkCalculationFrequency("7D",
                          "8D",
                          true /* should match */);
这很难看。拥有特定于上下文的常量可以解决这个问题

实际上,我会更进一步,重新定义函数原型以接受
enum

enum MatchType {
    ShouldMatch,
    ShouldNotMatch
};

void checkCalculationFrequency(string a, string b, MatchType match);

我更喜欢这种方式,而不是布尔方式,因为它允许您灵活地扩展函数,以便在以后接受其他
匹配类型。

我建议您不要这样做

首先,对于每个对象,将重新生成两个成员应该匹配和不应该匹配。这不好,因为这不是对象的行为。所以你想用的是,至少把它描述成静态的FINAL

第二,我更喜欢使用枚举,因为您可以完全控制参数的值,也就是说,在使用它时,必须使用SHOULD_MATCH或SHOULD_NOT_MATCH,而不仅仅是true或false。这也增加了可读性


问候。

这绝对不仅仅是一种时尚

我们有一个类似的系统,它以布尔值1或0的形式从开关获取输入,这与true或false几乎相同

在这个系统中,我们声明变量OPEN=true和CLOSED=false*,并将它们传递到函数中,这些函数根据开关的状态执行不同的操作。现在,如果有人碰巧以不同的方式连接开关,我们现在可能会在开关打开时得到值0,在开关关闭时得到值1

通过命名布尔变量,我们可以轻松地调整系统,而不必改变整个逻辑。代码变成了自文档化,因为开发人员可以更清楚地看到在这种情况下应该采取什么行动,而不必担心会产生什么价值

当然,布尔值的真正用途应该在我们的系统中的其他地方得到很好的证明


*(也许我们用OPEN,!OPEN我忘了)

取决于什么语言;有些语言有格式指南,可以指定首选的方式。这当然比只使用
true
false
要好得多。如果参数名称很清楚,我认为您的方式太过了。如果需要命名值,我建议使用枚举作为替代方法。您可以对其余参数应用类似的逻辑-声明一个
字符串whateverTheFirstParameterIs=“7D”
,并将其传递给函数(通常不清楚参数指的是什么)。但这感觉有点过分了。我的观点是,不要使用
应该匹配(而不是匹配)
。你应该给他们命名,但给他们起一个没人能理解的模糊名字。那样他们就得看说明书了。更好的是,不要编写手册,这样用户就不得不在心里解析代码。你越是晦涩难懂,他们就会更加关注你的工作,最终他们会在解决问题上有一种成就感真的,名字很有趣!有关“获取它”的语言,请参见+1,例如enum。这是“正确的方法”,尽管编写枚举一开始看起来像是一件苦差事。@是的,它使定义第三个枚举变得很容易,比如说
shouldbeaymatch
,之后会触发新的行为。
checkCalculationFrequency("7D",
                          "8D",
                          true /* should match */);
enum MatchType {
    ShouldMatch,
    ShouldNotMatch
};

void checkCalculationFrequency(string a, string b, MatchType match);