Руководство по стилю для F#
В следующих статьях приводятся рекомендации по форматированию кода F# и руководства по отдельным функциям языка и правилам их использования.
Это руководство создавалось на основе практики работы с F# в больших базах кода с группами программистов разных уровней. Соблюдение этого руководства позволяет в большинстве случаев успешно применять F# и избежать сложных ситуаций, вызванных изменениями требований к программам.
Учитывайте следующие принципы при написании кода F#, особенно если ожидается постепенное изменение системы. Каждая из рекомендаций в перечисленных здесь статьях основывается на этих пяти элементах.
Хороший код F# должен быть лаконичным, выразительным и композиционным
F# предоставляет много возможностей, позволяющих выражать действия малым количеством строк кода и повторно использовать универсальные функции. Основная библиотека F# также содержит много полезных типов и функций для работы с типичными коллекциями данных. Правильное сочетание собственных функций и функций из основной библиотеки F# (или других библиотек) является важной частью идиоматичного программирования на F#. В общем случае вы можете быть уверены, что решение проблемы с меньшим количеством строк кода будет более полезным как для других разработчиков, так и для вас самого в будущем. Мы настоятельно рекомендуем использовать для нетривиальных задач дополнительные библиотеки, например FSharp.Core, что-то из большого ассортимента библиотек .NET или размещенный в NuGet пакет стороннего производителя.
Хороший код F# поддерживает взаимодействие
Взаимодействие может иметь много значений, в том числе использование кода на других языках. Особенно важно правильно реализовать границы кода, с которыми взаимодействуют другие объекты, даже если эти вызывающие объекты написаны на F#. При работе с F# следует всегда думать, как другой код будет вызывать ваш код, в том числе из процедур на другом языке, например C#. В рекомендациях по проектированию компонентов F# подробно рассматриваются аспекты взаимодействия.
В хорошем коде F# используется объектное программирование, а не ориентация на объекты
F# обладает полной поддержкой программирования с помощью объектов на платформе .NET, предоставляя классы, интерфейсы, модификаторы доступа, абстрактные классы и многое другое. Для сложного функционального кода, например для реализации функций с контекстной ориентацией, вы можете легко инкапсулировать контекстную информацию в объекты такими способами, которые недоступны для функций. Необязательные параметры и аккуратное использование перегрузок позволяют упростить работу для вызывающих объектов.
Хороший код F# прекрасно работает без поддержки изменений
Всем известно, что для высокопроизводительного кода необходимо использовать изменения. Это основа современной компьютерной техники. Но такой код подвержен высокому риску ошибок, его трудно реализовать правильно. Старайтесь не предоставлять вызывающим объектам возможность изменений. Вместо этого создайте функциональный интерфейс, который скрывает реализацию всех изменений, когда важна производительность.
Хороший код F# поддерживает дополнительные инструменты
Дополнительные инструменты незаменимы для работы в больших базах кода, и F# позволяет создать такой код, который более эффективно поддерживает применение языковых средств F#. Например, старайтесь не злоупотреблять программированием без указания промежуточных переменных, чтобы сохранить возможность проверять промежуточные значения в отладчике. Также не забывайте про комментарии XML-документации с описанием конструкций, которые будут отображаться в виде всплывающих подсказок в редакторах при создании вызывающего кода. Не забывайте о том, что другим программистам должно быть удобно читать ваш код, перемещаться по нему, отлаживать и выполнять другие действия с помощью разных средств.
Из рекомендаций по форматированию кода F# вы узнаете, как сделать код удобным для чтения.
В соглашении о написании кода на F# предлагаются рекомендации по идиомам программирования на F# для удобства долгосрочного обслуживания больших баз кода F#.
В рекомендациях по проектированию компонентов F# рассматривается создание компонентов F#, например библиотек.