为什么要在函数声明中给出参数名称?

我知道在函数中省略参数名称有时用于指示该参数可能未使用。但是,为什么首先应该为头函数声明中的参数命名,是否有充分的理由?

为什么是

int sum(int a, int b);

在任何方面都比

int sum(int, int);

甚至(如果你更喜欢数学方式)

auto sum(int, int) -> int; ?

在我看来,第一种方法只是提供了实现细节,因此不应在声明中公开。不指定类型甚至具有发现缺失抽象的优势。例如

auto max_element(iterator, iterator);

会很奇怪,但命名它们实际上并没有使它变得更好,因为

auto max_element(range);

是我们真正想要表达的。

我会对名称实际添加某些内容而不仅仅是缺少抽象的示例感兴趣。

回答

函数声明描述了接口,即函数的用途。考虑以下示例:

void rotate(int x, int y);

与:

void rotate(int height, int width);

这些声明具有相同数量和类型的参数,但参数的语义却大不相同。命名参数是表达这种含义的合理方式。


当然,人们可以论证该函数应该是:

void rotate(Point);

或者

void rotate(Dimensions);

其中PointDimensions都是struct包含 2 ints 的简单s。这种方法确实不需要在声明中命名参数。

虽然这可能是更好的方法,但这可能并不总是一种选择。例如,如果您正在处理大量使用此类函数的大型代码库,则这可能需要进行大量重构,而这样做的成本可能与收益不符。

对于新代码,我个人会推荐这种方法,不仅是为了声明中的清晰语义,而且是为了通过将参数包装在单独的类型中提供的附加类型安全性。


两种方法都有利有弊,您选择哪一种是应该根据特定用例和环境做出的工程和设计决策。


以上是为什么要在函数声明中给出参数名称?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>