Стандарты, когда использовать пользовательские операторы
В настоящее время я читаю Функциональное программирование в реальном мире, и в нем кратко упоминаются операторы in-fix как одно из основных преимуществ пользовательских операторов. Существуют ли какие-либо стандарты, когда использовать или не использовать пользовательские операторы в F#? Я ищу ответы, эквивалентные этому.
Для справки вот цитата, на которую ссылается @JohnPalmer:
3.8 Определения операторов
Избегайте определения пользовательских символических операторов в проектах библиотеки F#-facing.
Пользовательские операторы необходимы в некоторых ситуациях и являются очень полезными нотационными устройствами в большом объеме кода реализации. Для новых пользователей библиотеки именованные функции часто проще в использовании. Кроме того, пользовательские символьные операторы могут быть трудны для документирования, и пользователям труднее искать справку по операторам из-за существующих ограничений в IDE и поисковых системах.
В результате, как правило, лучше всего публиковать ваши функциональные возможности как именованные функции и члены.
1 ответ
Пользовательские инфиксные операторы являются хорошей функцией в некоторых ситуациях, но когда вы используете их, вы должны быть очень осторожны, чтобы сохранить ваш код читабельным - поэтому рекомендации из руководств по дизайну F# применяются большую часть времени. Если бы я снова писал "Функциональное программирование в реальном мире", я был бы немного менее энтузиазмом относился к ним, потому что они действительно должны использоваться осторожно:-).
Тем не менее, есть некоторые библиотеки F#, которые хорошо используют пользовательские операторы, и иногда они работают довольно хорошо. Я думаю, что FParsec (библиотека комбинатора синтаксического анализатора) является одним из примеров - хотя, возможно, их слишком много. Другим примером является XML DSL, который использует @=
,
В общем, когда вы пишете обычную библиотеку F#, вы, вероятно, не хотите их выставлять. Однако, когда вы пишете язык, специфичный для предметной области, пользовательские операторы могут быть полезны.