代码气味-将布尔控制参数传递给函数

Code smell - passing boolean control argument to function

本文关键字:控制 参数传递 函数 布尔 代码      更新时间:2023-09-26

下面是代码片段,有一些我不喜欢的东西:

function insert(el, child, before){
  if ( before ) {
    el.insertBefore(child, el.childNodes[0]);
  } else {
    el.appendChild(child);
  }
}

为什么不使用insertBeforeinsertAfter这样的两个独立方法呢?这种方法和其他方法的优缺点是什么?

更新:

我收到了一篇很好的文章,解释了我想要什么。

此函数的全部目的是避免在调用函数的所有位置都放置if语句。所以,如果你有很多地方看起来像:

if (something) {
    foo.insertBefore(bar, foo.childNodes[0]));
} else {
    foo.appendChild(bar);
}

您可以将所有这些简化为:

insert(foo, bar, something);

用你的两种方法,它会变成:

if (something) {
    insertBefore(foo, bar);
} else {
    insertAfter(foo, bar);
}

这并不比原版好多少。