c# - 哪个代码更具可读性?

标签 c# readability

假设我有两个方法 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/

相关文章:

C#、 Entity Framework 、自增

c# - Visual Studio 2019 - 无法将自定义管道对象添加到工具箱 SSIS

c# - 这个 C# 功能有名称吗?它有什么作用?

java - 为什么 'condition && statement()' 在 Java 世界不流行?

java - 简单但反复出现的命名问题

php - 如何使 SQL 查询在 PHP 中更具可读性?

c# - 在 Asp Core 2 View 中访问 Session 对象

c# - 由于 Web API 中的特殊字符,未设置发布值

java - Java 中多个 'proxy' 方法的替代方法

regex - 使用显式编号的重复词代替问号,星号和加号