布尔逻辑最早应该完成吗?

时间:2014-07-01 16:36:11

标签: java boolean-logic

我有两种方法来编写append函数,它根据布尔值附加两个数组。下面是两个编码范例虽然听起来很自然,但我相信其中一个会提供更多优势。布尔逻辑是应该附加还是应该在代码中尽快完成?

选项1

append(foo1, foo2, boolean) {
   if (boolean) {
      foo1.append(foo2);
   } else {
      foo2.append(foo1);
   } 
}

function (boolean){
   append(foo1, foo2, boolean);
}

或 - 选项2

append(foo1, foo2) {
   foo1.append(foo2);
}

function (boolean){
   if (boolean) {
       append(foo1, foo2);
   }  else {
       append(foo2, foo1);
   } 
}

6 个答案:

答案 0 :(得分:2)

我认为这取决于

如果你总是想为你的追加函数提供一个布尔值,我会选择第一个。

但通常我会建议第二个选项,因为它实现了“通用”追加函数。

答案 1 :(得分:0)

为什么不利用重载?

// Used when ordering is unknown or generic append foo2 to foo1 
append(foo1, foo2) {
   foo1.append(foo2);
}


// Used when order is known
append(foo1, foo2, boolean) {
   if (boolean) {
      foo1.append(foo2);
   } else {
      foo2.append(foo1);
   } 
}

通过这种方式,您可以获得通用函数的灵活性和精度,前提是您了解了附加顺序。

答案 2 :(得分:0)

第二种方法更通用,更干净。 Append应对给定输入执行追加操作。在追加电话之前可以进行检查。

答案 3 :(得分:0)

我会使用选项二,然后只需删除自定义append函数,该函数仅用于包装本机String.append方法 - 即没有理由。因此,您只需要一个函数/方法:

// no need to write an append function which does what String.append already does...
function (boolean) 
{
  if (boolean) {
    foo1.append(foo2);
  } else {
    foo2.append(foo1);
  } 
}

答案 4 :(得分:0)

根据您的示例,问问自己是否真的有必要创建一个接受两个append()实例的新Foo方法。对我来说,通过调用与append()类关联的Foo方法,API更加简单。比较以下用法:

示例1

foo1.append(foo2); 

// alternatively
foo2.append(foo1);

示例2

append(foo1, foo2); 

// alternatively
append(true); 

// or 
append(foo1, foo2, true);

在第一个例子中,附加了哪个对象的意图是明确的。在第二个示例中,您必须记录方法,或者必须查看实现以了解发生的情况。

答案 5 :(得分:0)

我选择选项2,因为它是一个更清晰,更直观的实现。

我们应该尝试以一种不言自明的方式设计一个函数的签名(名称+参数),并清楚地表明它的作用。为了达到这样的清晰度,我们应该遵循的一个原则是使功能 DO JUST ONE THING 。即:如果函数返回没有任何副作用的值,则返回值单一用途。如果有任何副作用,请将其设为仅一个副作用

基于上述推理,选项2显然是赢家。 append(A, B)具有单一副作用,可以在更广泛的背景下重复使用。 append(boolean)要求来电者只决定一件事:附加订单。