0

我有以下 3 个做同样事情的例子

//case1 do it if the condition is valid
private void SetMultiplePropertyValues()
{
    if (Keyboard.GetKeyStates(Key.CapsLock) == KeyStates.Toggled)
    {
        //do somthing
    }
}

//case 2 return if the condition is not valid
private void SetMultiplePropertyValues()
{
    if (Keyboard.GetKeyStates(Key.CapsLock) != KeyStates.Toggled) return;
        //do somthing
}

//case 3 checking the condition in the calling scope
if (Keyboard.GetKeyStates(Key.CapsLock)== KeyStates.Toggled)
    SetMultiplePropertyValues())

private void SetMultiplePropertyValues()
{
    //do somthing
}

你会和哪一个一起去,为什么

4

2 回答 2

12

他们不做同样的事情,因为在前两种情况下,方法的名称是谎言;方法名称应该是SetValuesIfTheKeyStateIsToggledTryToSetValues或类似的东西。不要说你要做一件事然后不去做。更一般地说:分离你的关注点。我会选择第四个选项:

public void TryToFrob()
{
  if (CanFrob()) DoFrob();
}
private bool CanFrob()
{
  return Keyboard.GetKeyStates(Key.CapsLock) == KeyStates.Toggled;
}
private void DoFrob()
{
  // frob!
}

注意什么是公开的,什么是私有的。

这是一个看起来很傻的例子,因为每一种方法都很简单,但人们很容易想象这些方法很复杂的情况。保持你的策略和你的机制在逻辑上分开机制是“键盘是否处于特定状态?” 政策是“我有一些条件可以炒作;除非满足这些条件,否则我们绝不能炒作”。

于 2013-11-12T19:12:19.517 回答
0

首先,正如我们在代码注释中看到的那样,它们的作用不同。所以我认为你在谈论代码架构而不是功能。

其次,这里的 SO 不是要发表意见,但我会试着对你说一些关于这些差异的具体事情。

1-常见的if方法

if (true == false)
{
    return true;
}

对比

2 - 单线如果接近

if (true == false)  return true;

大多数代码惯例都说使用选项 1,因为它们更容易阅读和理解代码,并避免一些错误。我们还需要了解约定不是规则!所以它们只是约定俗成的,但在大多数情况下确实尽量避免使用选项 2。

还有一件事,一些代码惯例还说,当您需要一些非常简单的东西时,可以使用选项 2,例如这个给定的示例,它真的很容易阅读和理解。但这就像“规则”中的一个例外。

于 2013-11-12T19:21:12.700 回答