使用struct参数v.s.的优点和缺点是什么多个参数

时间:2015-08-06 19:23:35

标签: struct parameters

假设我有一个带有一对坐标xy的函数:

myFunction(int x, int y)
{
    // Do stuff... 
}

现在,我可以将这些参数包装到Point结构中:

struct Point
{
    int x;
    int y; 
}

myFunction(Point p)

甚至为程序员提供两种选择:

myFunction(int x, int y)

myFunction(Point p)
{
    myFunction(p.x, p.y)
}

使用结构分组参数而不是单独传递它们有什么优缺点?

这些权衡因编程语言而异吗?

2 个答案:

答案 0 :(得分:3)

结构是首选方式!

当你有一个或两个参数时(比如你的例子),没有太大的区别,但当你有4个或更多参数时,差别是显而易见的(你必须输入更少的代码)。

如果您想将参数作为指针或引用传递,则可以输入更少的代码。

使用 struct 的另一个好处是代码更易于维护。

让我们在实践中使用您自己的示例

来看待它

想象一下,您正在创建一个CAD应用程序,并且在最初的想法中,程序只能在一个平面(X,Y)中工作,因此您将有很多函数用作参数一个或多个点,类似于这样:

struct point
{
  int x;
  int y;
}

func Foo1(point a) {}
func Foo2(point a, point b) {}
.
.
.

但是几个月后应用程序设计发生了变化,现在它需要在空间(3D世界)中工作,因此您需要将Z坐标添加到点。

如果您正在使用结构,您唯一需要做的就是将Z变量添加到结构中并完成(当然,您需要更新函数中的公式)但如果您不使用您需要将Z参数添加到使用点作为参数的每个函数的结构。

func Foo1(int x, int y, int z) {}
func Foo2(int p1x, int p1y, int p1z, int p2X, int p2Y, int p2Z) {}

您可以在此处查看更详细的说明https://en.wikipedia.org/wiki/Struct_(C_programming_language)

答案 1 :(得分:3)

这将是高度语言特定的。结构在某些语言中很自然,而在其他语言中则不然。命名参数在某些语言中很自然,而在其他语言中则不然。有些语言不区分你的两种情况(考虑ML,其中两个值的匿名元组与结构基本相同)。

这也是高度针对具体情况的。如果你用点做了很多工作,那么拥有一个封装点的类型是很有意义的。如果这是整个系统中唯一需要一个点的功能,那么为此创建一个特殊类型可能非常麻烦。没有人回答"我应该在这里使用一种类型" (这是你问题的更好版本)。

不要专注于函数参数。专注于类型。什么类型的系统有意义?然后创建适用于这些类型的函数。