如果没有找到/计算数据,方法应该返回nil还是空数组?

时间:2013-01-15 08:17:23

标签: c# java php c++ objective-c

这是一般性的问题,有趣的是你使用什么方法,什么是利弊?有时候方法返回列表(例如,obj-c中的NSMutableArrayNSArray),而我现在的方法是返回nil,如果没有什么可以返回的话。如果它只是某个本地或自定义类的对象,那么返回nil是有意义的,但是如果没有找到任何内容,我们是否应该返回alloc&#ed; ed / init<

该问题主要针对objective-c,但也与其他语言有关。 Objective-c具有很好的功能来调用nil上的方法,但是并非所有其他语言的情况都是如此。因此,听取其他开发者(javac#PHP开发者)的论据也很有意思。

更新奇怪为什么有些人会在结束这个问题时投票。设计模式相关的问题也可以被描述为个人意见问题,然而架构和代码质量问题比语法问题更重要。

4 个答案:

答案 0 :(得分:2)

我相信没有一个答案。

对于我自己,我决定尽可能返回预期类型的​​结果,否则返回NULL。

说,在我的自制DAL中,getAll方法返回一个空数组(列表) - 因此可以将其传递给PHP的foreach运算符而不会引发错误。
另一方面,假定返回关联数组的getRow方法在没有找到数据的情况下返回NULL,因为空数组同样没用。

答案 1 :(得分:1)

在我看来,返回null和空容器有两个不同的含义。空容器意味着no result matched your query but it was successful,而空结果意味着something went wrong

在第一种情况下,如果您在某处写了代码,请说:

  print "You have found" + GetResults.Size() + " results" 

您将能够打印与查询匹配的零结果。如果您决定使用null,则必须添加显式检查。

我在将结果序列化为JSON时遇到了一些麻烦,作为对Web服务器请求的响应,后来我很遗憾我选择返回null而不是空数组。

答案 2 :(得分:0)

返回零或任何明显不属于的东西。不要做更多的工作而不是需要做的事。

返回一个空数组可能会导致分配许多无用的指针和结构,而你真正需要的只是说“我什么都没有。”

答案 3 :(得分:0)

在可可,

如果您将nil返回到某个阵列,则需要在之后进行检查,以确保您没有尝试访问阵列索引。

最好返回nil而不是没有任何对象的数组。