将多个结果返回反模式?

时间:2016-03-31 08:26:57

标签: ruby anti-patterns

我强烈反对返回多个结果以进行进一步多重赋值的方法,如下所示:

class ImportUsersFromFile
  def perform 
    ...
    [imported_rows, errors]
  end
end

因为它引入了一个模糊且不明显的数据结构“一个数组,其中第一个元素是这个东西,第二个元素就是其他东西”。如果很明显该方法应该返回这样的结构,那就没问题了。例如,可以从first_name, middle_name, last_name这样的方法中预期三个值Person#name_parts

但除了我的话,我无法支持我的意见。多个结果被认为是某种反模式或代码味道吗?愿意有一些联系。

1 个答案:

答案 0 :(得分:1)

为了它的价值,我不确定我会称之为反模式。我确实理解你的观点,但事实上Ruby特别有解释器处理你所讨论的问题:

def foo
  [1,2]
end

a = foo    # -> a = [1,2]
a,b = foo  # -> a = 1, b = 2
_,b = foo  # -> b = 2

因此,就我而言,必须知道方法/函数返回两个值并不比必须知道你传递两个值更糟糕。

话虽如此:如果它让你不舒服,你当​​然应该避免自己做。这没什么不对。