9

如果我在将函数用于任何地方之前编写函数,我发现向其参数添加类型注释很有用。这意味着我可以自动完成它的值,并且(尤其是作为 F# 新手)不会被意外的类型推断弄糊涂。

但是,一旦函数完成,我很想删除参数的类型注释,因为它们很难看。这听起来像是一件合理的事情吗?

我希望这可能取决于我在谈论什么样的功能。例如,它可能对私有函数有意义,但对公共函数没有意义。

4

5 回答 5

6

我认为这取决于很多因素。以下是一些支持保留注释的论点:

  1. 类型注释可以说是一种经过编译器检查的文档。
  2. 不要无故修改工作代码。
  3. 编译时可能需要某些类型注释,在这种情况下,保留所有类型注释而不是仅删除不必要的注释以保持一致性可能是有意义的。

但是,另一方面,也有一些令人信服的理由来删除它们:

  1. 编译器实际上可能会推断出更通用的类型,在这种情况下,您可以在更广泛的上下文集中重用函数。
  2. 您的代码会更简洁,您可能会发现它更具可读性。
于 2012-09-02T22:30:10.117 回答
4

对于它的价值,我的个人风格是使用 fsi 文件维护公共模块接口的注释,并删除 fs 模块实现文件中的大多数注释(除非从左到右类型推断需要它们)。使用这种方案,更改模块接口是一件大事,而更改其实现则较小。

于 2012-09-03T14:59:51.973 回答
2

不,它没有任何优势。你可以说它使程序在以后更容易更改,或者看起来更好,但实际上它永远不会成功。

很可能您最终还是会重新输入注释,原因与您最初添加它们的原因完全相同。

于 2012-09-02T17:41:02.557 回答
2

我认为,这里的一个重要论点是删除类型注释会改变 sources 的含义

事实上,让我们假设有一个源代码:let f (arg: MyType) = arg.ToString().
源限制arg为 type MyType。如果任何客户端代码尝试传递另一种类型的参数,它将根本无法编译。
这也适用于单元测试。使用类型注释,很容易看出所有单元测试f仅使用类型为 的参数进行调用MyType

如果类型注释被删除,类型推断工作不受限制,但测试还没有准备好,他们仍然只用MyType.

因此,删除类型注释必须与更改单元测试相关联,任何其他重构也是如此。如果您准备好改进测试,那就去做吧。否则你可能会自找麻烦,尤其是对于大型代码库。

于 2012-09-03T18:17:09.707 回答
0

这是个人风格的问题;我会把它们拿出来。随着您在 F# 编码方面的进步,您可能会发现您不必经常经历注释阶段。

于 2012-09-02T20:00:02.490 回答