Поделиться через


Руководство по стилю F#

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

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

Пять принципов хорошего кода F#

Имейте в виду следующие принципы в любой момент написания кода F#, особенно в системах, которые будут меняться с течением времени. Каждая часть руководства в дальнейших статьях связана с этими пятью пунктами.

  1. Хороший код F# является кратким, экспрессивным и компонуемым

    F# имеет множество функций, позволяющих выразить действия в меньшем количестве строк кода и повторно использовать универсальные функции. Базовая библиотека F# также содержит множество полезных типов и функций для работы с общими коллекциями данных. Композиция собственных функций и функций в основной библиотеке F# (или других библиотеках) является частью типичного идиоматического программирования на F#. Как правило, если вы можете выразить решение проблемы в меньшем количестве строк кода, другие разработчики (или ваше будущее) будут благодарны. Кроме того, настоятельно рекомендуется использовать библиотеку, например FSharp.Core, огромные библиотеки .NET , на которые выполняется F# или сторонний пакет в NuGet , если необходимо выполнить нетривиальную задачу.

  2. Хороший код F# совместим

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

  3. Хороший код F# использует программирование объектов, а не ориентацию объектов

    F# имеет полную поддержку программирования с объектами в .NET, включая классы, интерфейсы, модификаторы доступа, абстрактные классы и т. д. Для более сложного функционального кода, например функций, которые должны учитывать контекст, объекты могут легко инкапсулировать контекстную информацию способами, недоступными для функций. Такие функции, как необязательные параметры и тщательное использование перегрузки , упрощают использование этой функции для вызывающих.

  4. Хороший код на F# работает эффективно без явного использования мутаций

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

  5. Хороший код F# является инструментируемым

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

Дальнейшие шаги

Рекомендации по форматированию кода F# объясняют, как оформлять код, чтобы его было легко читать.

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

Рекомендации по проектированию компонентов F# предоставляют рекомендации по созданию компонентов F#, таких как библиотеки.