Jam*_*hon 15 language-agnostic return-value
如果您需要在一个方法中返回两件事,那么最好的方法是什么?
我理解一个方法应该只做一件事的理念,但是说你有一个运行数据库选择的方法,你需要拉两列.我假设您只想遍历数据库结果集一次,但是您想要返回两列值的数据.
我提出的选项:
Dir*_*irk 15
这与语言无关:在Lisp中,您实际上可以从函数返回任意数量的值,包括(但不限于)none,one,two,......
(defun returns-two-values ()
(values 1 2))
Run Code Online (Sandbox Code Playgroud)
Scheme和Dylan也是如此.在Python中,我实际上会使用包含2个值的元组
def returns_two_values():
return (1, 2)
Run Code Online (Sandbox Code Playgroud)
正如其他人指出的那样,您可以使用outC#中的参数返回多个值.在C++中,您将使用引用.
void
returns_two_values(int& v1, int& v2)
{
v1 = 1; v2 = 2;
}
Run Code Online (Sandbox Code Playgroud)
在C中,您的方法将指向位置,您的函数应存储结果值.
void
returns_two_values(int* v1, int* v2)
{
*v1 = 1; *v2 = 2;
}
Run Code Online (Sandbox Code Playgroud)
对于Java,我通常使用专用类或非常通用的小助手(目前,在我的私有"commons"库中有两个:Pair<F,S>并且Triple<F,S,T>,两者都只是2个resp.3值的简单不可变容器)
Nem*_*emi 14
我会创建数据传输对象.如果它是一组信息(名字和姓氏),我会创建一个Name类并返回它.#4是要走的路.它看起来像前面的更多工作(它是),但后来澄清了它.
如果它是一个记录列表(数据库中的行),我会返回某种类型的Collection.
我绝不会使用全局变量,除非应用程序是微不足道的.
azh*_*lov 12
不是我自己的想法(鲍勃叔叔):
如果这两个变量之间存在凝聚力 - 我听过他说,你就错过了这两个领域的课程.(他对使用长参数列表的函数说了同样的话.)
另一方面,如果没有凝聚力,那么该函数不止一件事.
使用 std::vector、QList 或某些托管库容器来保存您想要返回的任意数量的 X:
QList<X> getMultipleItems()
{
QList<X> returnValue;
for (int i = 0; i < countOfItems; ++i)
{
returnValue.push_back(<your data here>);
}
return returnValue;
}
Run Code Online (Sandbox Code Playgroud)