是否有F#的“官方”命名/大小写规范?
我一直在犹豫是否要使用C#风格:
Class.MyFunctionName or Module.my_function_name
在F#中,你应该混合使用BCL类和F#库类:它们有不同的大小写方式,代码看起来很丑。是否有F#的“官方”命名/大小写规范?
我一直在犹豫是否要使用C#风格:
Class.MyFunctionName or Module.my_function_name
在F#中,你应该混合使用BCL类和F#库类:它们有不同的大小写方式,代码看起来很丑。是的,存在混淆,因为F#经过多年从OCaml到.Net的演变。基本上,命名约定是一种“破坏性变更”-旧代码与新代码不一致。
然而,2009年5月的CTP已经解决了这个问题。
发行说明中说...
标准库命名约定
采用的F#库命名约定如下:
所有.NET和F# OO代码都按照现有的.NET指南使用PascalCase
F#函数式编程操作符(例如List.map)仅供F#内部实现代码使用。这种代码使用camelCase作为操作符名称
不应使用下划线。
所以,你的问题是...
Class.MyFunctionName or Module.my_function_name
答案是:
答案为:
Class.MyFunctionName 和 Module.MyFunctionName(但请参见下面的编辑!)
(应用规则1以上)。
-- 编辑。2019年11月2日 --
当前指南建议在模块级别使用 camelCase 作为函数命名方式,因此是
Module.myFunctionName
这样可以使生产代码与 F# 库保持一致(例如 List.averageBy)。
Use PascalCase for type declarations, members, and labels
Classes, interfaces, structs, enumerations, delegates, records, and discriminated unions should all be named with PascalCase. Members within types and labels for records and discriminated unions should also use PascalCase.
type IMyInterface = abstract Something: int type MyClass() = member this.MyMethod(x, y) = x + y type MyRecord = { IntVal: int; StringVal: string } type SchoolPerson = | Professor | Student | Advisor | Administrator
并且
Use camelCase for module-bound public functions
When a module-bound function is part of a public API, it should use camelCase: F#
module MyAPI = let publicFunctionOne param1 param2 param2 = ... let publicFunctionTwo param1 param2 param3 = ...
所以,基于这些,我的答案是:
Class.MyFunctionName
Module.my_function_name
Class.MyFunctionName
Module.myFunctionName
任何官方声明:我认为“还没有完全准备好”,但是在VS 2010达到Beta1时,您可能会看到F#库以接近最终的形式出现,并且与CTP相比会有很多重命名。考虑到其历史,F#可能始终比其较老的.NET兄弟们更加不稳定。
从我在hubfs.com和其他来源所看到的,它是由.NET和OCaml混合而成的。
我希望他们能够选择一种方式并坚持下去,而不是有两种不同的约定。作为微软,我相信他们会采用.NET风格。
不确定是否有真正的解决方案。似乎OCaml风格的代码可能会保留一些命名,即小写模块方法,而OO成员将采用.NET风格。