Стандарты, когда использовать пользовательские операторы

В настоящее время я читаю Функциональное программирование в реальном мире, и в нем кратко упоминаются операторы in-fix как одно из основных преимуществ пользовательских операторов. Существуют ли какие-либо стандарты, когда использовать или не использовать пользовательские операторы в F#? Я ищу ответы, эквивалентные этому.

Для справки вот цитата, на которую ссылается @JohnPalmer:

3.8 Определения операторов 

Избегайте определения пользовательских символических операторов в проектах библиотеки F#-facing.

Пользовательские операторы необходимы в некоторых ситуациях и являются очень полезными нотационными устройствами в большом объеме кода реализации. Для новых пользователей библиотеки именованные функции часто проще в использовании. Кроме того, пользовательские символьные операторы могут быть трудны для документирования, и пользователям труднее искать справку по операторам из-за существующих ограничений в IDE и поисковых системах.

В результате, как правило, лучше всего публиковать ваши функциональные возможности как именованные функции и члены.

1 ответ

Решение

Пользовательские инфиксные операторы являются хорошей функцией в некоторых ситуациях, но когда вы используете их, вы должны быть очень осторожны, чтобы сохранить ваш код читабельным - поэтому рекомендации из руководств по дизайну F# применяются большую часть времени. Если бы я снова писал "Функциональное программирование в реальном мире", я был бы немного менее энтузиазмом относился к ним, потому что они действительно должны использоваться осторожно:-).

Тем не менее, есть некоторые библиотеки F#, которые хорошо используют пользовательские операторы, и иногда они работают довольно хорошо. Я думаю, что FParsec (библиотека комбинатора синтаксического анализатора) является одним из примеров - хотя, возможно, их слишком много. Другим примером является XML DSL, который использует @=,

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

Другие вопросы по тегам