假设我有两个方法 bool Foo()
和 bool Bar()
。以下哪项更具可读性?
if(Foo())
{
SomeProperty = Bar();
}
else
{
SomeProperty = false;
}
或
SomeProperty = Foo() && Bar();
一方面,我认为短路 &&
是一个有用的特性,第二个代码示例要短得多。另一方面,我不确定人们通常是否习惯于在条件语句之外看到 &&
,所以我想知道这是否会引入一些认知失调,从而使第一个示例成为更好的选择。
你怎么看?是否有其他因素影响决策?例如,如果 &&
表达式的长度超过屏幕上可以显示的一行,我应该选择前者吗?
回答后的说明:
我应该在答案提出的初始问题中包含一些内容。
Bar()
的执行成本可能比Foo()
高,但这两种方法都不应该有副作用。- 这两个方法的命名都更恰当,不像这个例子。
Foo()
归结为类似CurrentUserAllowedToDoX()
而Bar()
更像是XCanBeDone()
最佳答案
我同意普遍的共识,即 Foo() && Bar() 形式是合理的除非 Bar() 因其副作用和值(value)而有用。
如果 Bar() 对于它的副作用和它的值都是有用的,我的第一选择是重新设计 Bar() 以便它的副作用的产生和它的值的计算是不同的方法。
如果出于某种原因这是不可能的,那么我会非常喜欢原始版本。对我来说,原始版本更清楚地强调对 Bar() 的调用是对其副作用有用的语句的一部分。对我来说,后一种形式强调 Bar() 的值(value)是有用的。
例如,给定之间的选择
if (NetworkAvailable())
success = LogUserOn();
else
success = false;
和
success = NetworkAvailable() && LogUserOn();
我会选择前者;对我来说,很容易忽视后者的重要副作用。
但是,如果它是一个选择
if (NetworkAvailable())
tryWritingToNetworkStorage = UserHasAvailableDiskQuota();
else
tryWritingToNetworkStorage = false;
和
tryWritingToNetworkStorage = NetworkAvailable() && UserHasAvailableDiskQuota();
我会选择后者。
关于c# - 哪个代码更具可读性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1544861/