F#命名约定

时间:2009-02-09 01:59:38

标签: .net f# naming-conventions

F#是否有“官方”命名/套管约定?

我总是怀疑是否使用C#风格:

Class.MyFunctionName or Module.my_function_name

在F#中,你的意思是混合使用BCL类和F#库:它们有不同的外壳,代码看起来非常难看。

6 个答案:

答案 0 :(得分:20)

是的,存在混淆,因为多年来F#已经从OCaml转变为.Net。基本上,命名约定是“重大变化” - 旧代码与新代码不一致。

然而,2009年5月的CTP解决了这个问题。

Release Notes说......

标准库命名约定

  

F#库采用的命名约定如下:

     
      
  • 所有.NET和F#OO代码都根据现有的.NET指南使用PascalCase

  •   
  • F#函数编程运算符(如List.map)用于F#内部实现代码。这种代码使用camelCase作为运营商名称

  •   
  • 不应使用下划线。

  •   

所以,你的问题......

Class.MyFunctionName or Module.my_function_name

答案是

  

Class.MyFunctionName和Module.MyFunctionName

(应用上述规则1)。

通过与F#编程运算符(例如List.averageBy)的比较仍然存在一些混淆,但生产F#代码应该使用CamelCase,因此看起来像其他人的.Net代码。如有疑问,请查看sample code以获取CTP。

(我个人喜欢_the_caml_style,但我必须GetOverThat)

答案 1 :(得分:3)

任何官方消息:我认为“还不完全”,但每当VS 2010达到Beta1时,您可能会看到F#库的近乎最终形式,并且会有一些相对于CTP的重命名。鉴于其历史,F#可能总是比它的旧兄弟更加精神分裂。

答案 2 :(得分:2)

我认为自当前接受答案以来,答案可能已经改变。

今天F# Style Guide说:

  

使用PascalCase进行类型声明,成员和标签

     

类,接口,结构,枚举,委托,记录和   受歧视的工会都应使用PascalCase命名。会员   在记录和歧视工会的类型和标签内应   也可以使用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

https://docs.microsoft.com/en-us/dotnet/fsharp/style-guide/formatting#use-pascalcase-for-type-declarations-members-and-labels

  

使用camelCase进行模块绑定的公共功能

     

当模块绑定函数是公共API的一部分时,应使用   camelCase:F#

module MyAPI =
    let publicFunctionOne param1 param2 param2 = ...

    let publicFunctionTwo param1 param2 param3 = ...

https://docs.microsoft.com/en-us/dotnet/fsharp/style-guide/formatting#use-camelcase-for-module-bound-public-functions

因此,基于这些,我的回答是:

Class.MyFunctionName 
Module.my_function_name 

应该这样写:

Class.MyFunctionName  
Module.myFunctionName 

答案 3 :(得分:1)

从hubfs.com和其他来源看到的,它来自.net和OCaml。

我希望他们切换到任何一个并没有两个不同的约定,并且是微软我相信他们会采用点网风格。

答案 4 :(得分:1)

我的理解和当前用法是模块/静态函数具有小写,而“实例”函数具有大写。

编辑不是这个问题的答案,但相关:Don Syme的F# Formatting conventions

答案 5 :(得分:0)

不确定是否有任何真正的解决方案。似乎OCaml-ish代码可能会保留一些命名,即小写模块方法,而OO成员将采用.NET风格。