gpt4 book ai didi

conditional - If分支没有任何代码味道或良好实践吗?

转载 作者:行者123 更新时间:2023-12-04 03:09:56 24 4
gpt4 key购买 nike

我已经在这里对线程(至少是commented)进行了响应,答案中包含这样的代码,但是我想知道用一系列(或多个)分支在不执行任何操作的情况下编写一系列if分支是好是坏形式它们,通常消除了在每个分支中检查null的麻烦。

一个示例(C#代码):

if (str == null) { /* Do nothing */ }
else if (str == "SomeSpecialValue")
{
// ...
}
else if (str.Length > 1)
{
// ...
}

代替:
if (str != null && str == "SomeSpecialValue")
{
// ...
}
else if (str != null && str.Length > 1)
{
// ...
}

而且,当然,这只是一个例子,因为我倾向于将它们与更大和更复杂的类一起使用。在大多数情况下, null值将指示不执行任何操作。

对我来说,这减少了代码的复杂性,并且在我看到它时是有道理的。那么,这是好是坏形式(甚至有代码气味)?

最佳答案

最好避免以下情况,因为它不必要地重新检查其中一个条件(编译器将对此进行优化的事实不在此列,这可能会使尝试阅读您的代码的人们付出更多的努力):

if (str != null && str == "SomeSpecialValue")
{
// ...
}
else if (str != null && str.Length > 1)
{
// ...
}

但是,按照您的建议做下面的事情也很奇怪:
if (str == null) { /* Do nothing */ }
else if (str == "SomeSpecialValue")
{
// ...
}
else if (str.Length > 1)
{
// ...
}

我说这很奇怪,因为它混淆了您的意图并违背了读者的期望。如果您检查条件,人们会期望您在满意的情况下做一些事情,但您不满意。这是因为您的目的不是实际处理null条件,而是在检查您实际感兴趣的两个条件时避免使用null指针。实际上,没有理智地处理两个概念状态(非null输入),它读起来就像您有三个要处理的概念状态一样。从计算上讲,您可以说存在三个这样的状态,这一点就不重要了-尚不清楚。

在这种情况下,通常的方法是按照Oren A的建议-检查null,然后检查结果块中的其他条件:
if (str != null) 
{
if (str == "SomeSpecialValue")
{
// ...
}
else if (str.Length > 1)
{
// ...
}
}

这只不过是增强可读性的问题,而不是代码气味的问题。

编辑:但是,如果您设置为不执行任何操作,那么我非常喜欢您添加了“不执行任何操作”注释。否则,人们可能会认为您只是忘了填写代码。

关于conditional - If分支没有任何代码味道或良好实践吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3946166/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com