Соглашение об именовании 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.