C# 通过返回与If/Else控制流量

C# 通过返回与If/Else控制流量,c#,coding-style,control-flow,C#,Coding Style,Control Flow,哪一个更好(通过返回的隐式控制流或通过if的控制流)——见下文。请解释你认为对任何一方有利/不利的方面。我喜欢选项A,因为它的代码更少 通过回流的流量: 通过If/Else的流量: 我个人喜欢if/else方法。首先,你的if语句是肯定的,而不是否定的,这样更容易阅读。第二,你将条件封装在花括号中,我就是这种风格的粉丝 不管怎么说,第二步比第一步更容易理解。在我的书中,这一点始终是成功的。这两条语句都是通过if语句控制流的。这只是你如何处理这种情况的问题 在写这样的逻辑陈述时,我总是犹豫不决。我

哪一个更好(通过返回的隐式控制流或通过if的控制流)——见下文。请解释你认为对任何一方有利/不利的方面。我喜欢选项A,因为它的代码更少

通过回流的流量: 通过If/Else的流量:
我个人喜欢
if/else
方法。首先,你的
if
语句是肯定的,而不是否定的,这样更容易阅读。第二,你将条件封装在花括号中,我就是这种风格的粉丝


不管怎么说,第二步比第一步更容易理解。在我的书中,这一点始终是成功的。

这两条语句都是通过
if
语句控制流的。这只是你如何处理这种情况的问题

在写这样的逻辑陈述时,我总是犹豫不决。我有一部分人喜欢第一个选项,因为它的代码少了一点。我的另一部分喜欢第二种选择,因为它更容易遵循逻辑流程。使用第一个选项,很容易错过return语句,这可能会导致将来的可管理性问题


…正因为如此,在我的书中,第二种选择总是获胜的。编写易于阅读和维护的代码比尝试走捷径要好。

在这种情况下,我会选择选项A。在这种情况下,您正在进行输入验证,如果输入无效(不可编辑),则会阻止执行其余代码。这使得函数的整个主体不在一个大的if/else语句中,并且使它更具可读性


但是,我也会考虑引发一个异常而不是重新调整一个null——假设将一个非可编辑对象传递到一个“编辑”函数不是正常的发生。p> 我更喜欢我认为执行代码较少的那一个。
如果这对class.Editable更为常见,那么我会选择A

但这个例子在这两种情况下都没有多大优势

在任何给定的情况下,开发人员都应该分析输入并调整代码,以便在最常见的输入数据上进行优化

编辑:
澄清:

实际上,我的意思是执行更少的代码是最有效的…

我也更喜欢选项1。对我来说,它读起来更像一本书。而且,我总是为选项2的末尾没有回报而感到痛苦

为了可读性和可维护性,我更喜欢第二种方法。可读性是因为它比第一种方法更清晰,可维护性是因为如果需要修改if或else子句,我不必担心添加大括号。此外,如果不包括新行,第一种方法只比第二种方法少7个字符,这很难作为选择第一种方法而不是第二种方法的理由

也就是说,我实际上更喜欢这样:

public ActionResult Edit(MyClass class)
{
    ActionResult rv = null;
    if (class.Editable)
    {
        class.Update();
        rv = View();
    }
    return rv;
}

这是更多的代码,但我现在可以在return语句上设置一个断点来检查返回的值,而不必在您提供的两个选项中设置两个断点来执行相同的操作。

它们都是有效的选项,一个并不一定比另一个更好。你选择哪一个最终是个人偏好。是的,选项A产生的代码稍微少一点,但总的来说,它们几乎相等

在这两种情况下,您都是通过if和返回来控制流。这真的是一个问题,你喜欢如何看待你的布尔逻辑-负还是正


ActionResult
是枚举还是基类?如果它是一个枚举,当
Edit
返回看似枚举的内容时,为什么要返回
null
?如果只返回一个
ActionResult
值,该值指示由于对象未处于可编辑状态而未执行任何操作,这不是更简单吗?

我更喜欢第一个选项,前提是您检查的案例是需要满足保护/先决条件才能使方法调用有效。尽管您可能会争论是否应该返回null,或者抛出(参数)异常。当一个类不可编辑时,它真的应该是这个方法的一个参数吗


也许更好的选择是创建一个IEditable接口,并在您正在传递实例的类上实现它。

在这个特定示例中没有太大区别,但一般来说,我喜欢第一种方法,因为它使用。如果开始向第二种方法添加嵌套条件,您将看到代码的可读性将受到影响。Guard子句可以大大减少嵌套深度,并真正提高代码的可读性。

尽早退出-我更喜欢看到所有导致方法退出的条件,而不需要预先做很多工作。如果我可以避免的话,我会避免使用其他语句


这实际上是代码合同人群中一个相当突出的思想流派。

我也更喜欢if/else。对我来说,易读性、可读性和可维护性高于其他任何东西。

第一个选项使用return更好,因为:

  • 你有一个地方可以把所有的警卫和先决条件放在你的财产和其他东西附近
  • 对我来说,更容易的想法是“让我们看看所有可能出错的地方,然后再回来。从这一点上说,我已经拥有了我需要的一切,我正在努力。”
  • 如果确实使用if/else方法,那么该方法/函数中的所有代码都会缩进。添加其他if或for,事情就会变得有趣起来

  • 这种方法(return)的一个支持者是,在这种情况下,在

    Me中也是如此,尽管当您开始有更多的条件返回null(权限、其他状态等)把它们都堆在顶部是很好的。为了更好的可读性,我更喜欢
    if/else
    。我想知道为什么另一种方法是公认的答案,也是出于同样的原因!!我更喜欢这种方法的主要原因是保护语句是eas
    public ActionResult Edit(MyClass class)
    {
        if (class.Editable)
        {
           class.Update();
           return View();
        }
        else
        {
           return null;
        }
    }
    
    public ActionResult Edit(MyClass class)
    {
        ActionResult rv = null;
        if (class.Editable)
        {
            class.Update();
            rv = View();
        }
        return rv;
    }