如果我在任何地方使用函数之前编写函数,我发现在其参数中添加类型注释很有用。这意味着我可以自动完成其值,并且(特别是作为F#newbie)不会被意外的类型推断混淆。
然而,一旦函数完成,我很想删除参数的类型注释,因为它们很难看。这听起来像是一件合理的事吗?
我希望它可能取决于我所说的功能。例如,它可能对私有函数有意义,但对公共函数则没有意义。
答案 0 :(得分:6)
我认为这取决于很多因素。这里有一些赞成留下注释的论据:
然而,另一方面,还有一些令人信服的理由将其删除:
答案 1 :(得分:4)
对于它的价值,我的个人风格是使用fsi文件维护公共模块接口的注释,并删除fs模块实现文件中的大多数注释(除非它们是从左到右类型推断所需的)。使用这种方案,改变模块接口是一个大问题,而改变其实现的成本则更低。
答案 2 :(得分:2)
没有。它没有任何优势。你可以说它使得程序之后更容易改变,或者它看起来更好,但在实践中它永远不会有效。
最有可能的是你最终还是会重新输入注释,原因与首先添加它们的原因完全相同。
答案 3 :(得分:2)
我认为,这里的一个重要论点是删除类型注释会改变源的含义。
确实,我们假设有一个源代码:let f (arg: MyType) = arg.ToString()
来源将arg
限制为MyType
类型。如果任何客户端代码试图传递另一种类型的参数,则它将无法编译
这也适用于单元测试。使用类型注释,很容易看到所有单元测试仅使用类型为f
的参数调用MyType
。
如果删除了类型注释,则类型推断工作不受限制,但测试尚未就绪,他们仍仅使用MyType
对其进行测试。
因此,删除类型注释必须与更改单元测试相关联,与其他任何重构相同。如果您准备改进测试,那就去做吧。否则,您可能会遇到麻烦,特别是对于大型代码库。
答案 4 :(得分:0)
这是个人风格的问题;我会带他们出去。随着你在F#编码方面做得越来越好,你可能会发现你不必经常完成注释阶段。