这是一般性的问题,有趣的是你使用什么方法,什么是利弊?有时候方法返回列表(例如,obj-c中的NSMutableArray
或NSArray
),而我现在的方法是返回nil,如果没有什么可以返回的话。如果它只是某个本地或自定义类的对象,那么返回nil是有意义的,但是如果没有找到任何内容,我们是否应该返回alloc&#ed; ed / init<
该问题主要针对objective-c
,但也与其他语言有关。 Objective-c
具有很好的功能来调用nil
上的方法,但是并非所有其他语言的情况都是如此。因此,听取其他开发者(java
,c#
和PHP
开发者)的论据也很有意思。
更新奇怪为什么有些人会在结束这个问题时投票。设计模式相关的问题也可以被描述为个人意见问题,然而架构和代码质量问题比语法问题更重要。
答案 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
而不是没有任何对象的数组。