何时编写不同的函数以及何时使用与参数相同的函数?

时间:2016-04-17 06:11:56

标签: javascript function

换句话说,我应该什么时候写这个?

_.insertUp = (arr, obj, newObj) => {
  return arr.splice(arr.indexOf(obj), 0, newObj)
}

_.insertDown = (arr, obj, newObj) => {
  return arr.splice(arr.indexOf(obj) + 1, 0, newObj)
}

_.insertUpDeep = (arr, obj, newObj) => {
  const found = _.findDeep(arr, obj)
  if (found) _.insertUp(found, obj, newObj)
  return arr
}

_.insertDownDeep = (arr, obj, newObj) => {
  const found = _.findDeep(arr, obj)
  if (found) _.insertDown(found, obj, newObj)
  return arr
}

我应该什么时候写这个?

_.insert = (pos, arr, obj, newObj) => {
  if (pos === 'up') return arr.splice(arr.indexOf(obj), 0, newObj)
  if (pos === 'down') return arr.splice(arr.indexOf(obj) + 1, 0, newObj)
}

_.insertDown = (arr, obj, newObj) => {
  return arr.splice(arr.indexOf(obj) + 1, 0, newObj)
}

_.insertUpDeep = (arr, obj, newObj) => {
  const found = _.findDeep(arr, obj)
  if (found) _.insert('up', found, obj, newObj)
  return arr
}

_.insertDownDeep = (arr, obj, newObj) => {
  const found = _.findDeep(arr, obj)
  if (found) _.insert('down', found, obj, newObj)
  return arr
}

(我认为像jQuery这样的库倾向于使用第一个示例?例如appendprepend。)

2 个答案:

答案 0 :(得分:1)

它是为了让自己保持灵活性,同时保持代码的有序性和功能的小巧性和可读性。 第一个例子就是这样,它遵循编写函数的指导做一件事,所以即使你需要第二个例子中的函数,它应该是这样的:

_.insertUp = (arr, obj, newObj) => {
  return arr.splice(arr.indexOf(obj), 0, newObj)
}

_.insertDown = (arr, obj, newObj) => {
  return arr.splice(arr.indexOf(obj) + 1, 0, newObj)

_.insert = (pos, arr, obj, newObj) => {
  if (pos === 'up') return insertUp(arr, obj, newObj)
  if (pos === 'down') return insertDown (arr, obj, newObj)
}

答案 1 :(得分:1)

我认为考虑函数如何出现在使用它们的代码中是很重要的。如果你有insertUp(...)它有意义,并且不正确地调用函数并不容易。

当你有insert('up'...)时,你会引入一种“up”的魔法参数。当你查看那段代码时,你不得不想知道其他值是可以接受的。你可以猜测“下降”可能是可以接受的。 “左”或“右”是否可接受?怎么样'UP'?如果传递函数不喜欢的值会发生什么?谁知道。当您查看调用函数的代码时,代码更难理解。