Соглашение об именовании F #

Существует ли "официальное" соглашение об именах/обсадках для F #?

Я всегда сомневаюсь в использовании стиля С# или нет:

Class.MyFunctionName or Module.my_function_name

В F # вы должны смешивать классы BCL и библиотеки F #: у них разные оболочки, а код выглядит очень уродливо.

Ответы

Ответ 1

Да, есть путаница, потому что F # с годами превращается из OCaml в .Net. В принципе, соглашения об именах являются "нарушением изменений" - старый код несовместим с новым кодом.

Однако в мае 2009 года CTP решила проблему.

Примечания к выпуску говорят...

Стандартные соглашения об именах библиотек

Соглашения об именах, принятые для библиотеки F #, следующие:

  • Весь код .NET и F # OO использует PascalCase в соответствии с существующими рекомендациями .NET.

  • Операторы функционального программирования F #, такие как List.map, используются для внутреннего кода реализации F #. Этот тип кода использует camelCase для имен операторов

  • Подчеркивания не должны использоваться.

Итак, ваш вопрос...

Class.MyFunctionName or Module.my_function_name

Ответ

Class.MyFunctionName и Module.MyFunctionName

(применяя правило 1 выше).

По-прежнему существует некоторая путаница по сравнению с операторами программирования F # (например, List.averageBy), но производственный код F # должен использовать CamelCase и, таким образом, выглядеть как все .Net-код. Если есть сомнения, проверьте пример кода для CTP.

(Мне лично нравится_the_caml_style, но мне нужно GetOverThat)

Ответ 2

Все должностное лицо: я думаю, что "еще не совсем", но всякий раз, когда VS 2010 достигает Beta1, вы, вероятно, увидите библиотеку F # в своей почти финальной форме, и будет число переименований относительно CTP. F #, вероятно, всегда будет немного шизофреником, чем его старые кузены .NET, учитывая его историю.

Ответ 3

Мое понимание и текущее использование заключается в том, что модули/статические функции имеют строчный регистр, а функции "instance" имеют верхний регистр.

Изменить не ответ на этот вопрос, но связанный: F # Соглашения о форматировании от Don Syme

Ответ 4

Из того, что я видел из hubfs.com и других источников, это смесь из .net и OCaml.

Я надеюсь, что они переключаются на один и не имеют двух разных соглашений и являются Microsoft, я уверен, что они пойдут с использованием стиля dot net.

Ответ 5

Я думаю, что ответ мог измениться со времени принятого в настоящее время ответа.

Руководство по стилю F # сегодня гласит:

Use PascalCase for type declarations, members, и labels

Классы, интерфейсы, структуры, перечисления, делегаты, записи и все дискриминационные союзы должны быть названы с помощью 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

и

Use camelCase for module-bound public functions

Когда функция, связанная с модулем, является частью общедоступного 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 

Ответ 6

Не уверен, что есть реальное решение. Кажется, что, возможно, OCaml-ish-код может сохранить некоторые из его имен, т.е. Методы нижнего регистра, тогда как члены OO будут идти в стиле .NET.