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


Начало работы с F# в Visual Studio Code

Вы можете писать на F# в Visual Studio Code с помощью плагина Ionide, чтобы получить отличный кроссплатформенный опыт работы в лёгкой интегрированной среде разработки (IDE) с IntelliSense и рефакторингами кода. Посетите Ionide.io, чтобы узнать больше о плагине.

Заметка

Прежде чем начать, убедитесь, что вы установили и F#, и подключаемый модуль Ionide.

Изучение F# с помощью скриптов и REPL

Самый быстрый способ начать запись F# — это файл скрипта (.fsx) и F# Interactive (FSI). Не требуется файлов проекта или настройки сборки — просто создайте файл и начните программировать, как если бы вы использовали Python или скрипт оболочки.

Создание и выполнение сценария

Откройте терминал и выполните следующую команду:

touch hello.fsx
code hello.fsx

Добавьте указанный ниже код в файл.

printfn "Hello from F# Interactive!"

let square x = x * x

[ 1 .. 10 ]
|> List.map square
|> printfn "Squares: %A"

Запустите скрипт непосредственно из терминала:

dotnet fsi hello.fsx

Вы должны увидеть:

Hello from F# Interactive!
Squares: [1; 4; 9; 16; 25; 36; 49; 64; 81; 100]

Используйте интерактивный REPL из VS Code

Сценарии особенно эффективны при сочетании с интеграцией FSI Ionide. Создайте файл с именем MyFirstScript.fsx и добавьте следующий код:

let toPigLatin (word: string) =
    let isVowel (c: char) =
        match c with
        | 'a' | 'e' | 'i' | 'o' | 'u'
        | 'A' | 'E' | 'I' | 'O' | 'U' -> true
        |_ -> false
    
    if isVowel word[0] then
        word + "yay"
    else
        word[1..] + string(word[0]) + "ay"

Эта функция преобразует слово в форму Pig Latin. Следующий шаг — оценить его с помощью F# Interactive (FSI).

Выделите всю функцию (она должна иметь длину 11 строк). После выделения удерживайте клавишу Alt и нажмите клавишу ВВОД. Вы заметите, что окно терминала появится в нижней части экрана, и оно должно выглядеть примерно так:

пример вывода результатов интерактивной работы F# с Ionide

Это сделал три вещи:

  1. Он запустил процесс FSI.
  2. Он отправил выделенный вами код в процесс FSI.
  3. Процесс FSI оценил отправленный вами код.

Так как вы отправили функцию , теперь можно вызвать эту функцию с помощью FSI! В интерактивном окне введите следующее:

toPigLatin "banana";;

Вы увидите следующий результат:

val it: string = "ananabay"

Теперь давайте попробуем с гласной в качестве первой буквы. Введите следующее:

toPigLatin "apple";;

Вы увидите следующий результат:

val it: string = "appleyay"

Эта функция, как представляется, работает должным образом. Поздравляем, вы только что написали первую функцию F# в Visual Studio Code и оценили ее с помощью FSI!

Заметка

Как вы могли заметить, строки в FSI заканчиваются на ;;. Это связано с тем, что FSI позволяет вводить несколько строк. ;; в конце позволяет FSI знать, когда код завершится.

Когда следует использовать скрипты

Скрипты отлично подходят для изучения идей, прототипов, анализа данных и задач автоматизации. Вы можете ссылаться на пакеты NuGet непосредственно в скрипте, используя #r "nuget: PackageName", — файл проекта не требуется.

Когда код выходит за рамки одного файла или должен быть скомпилирован и распределен, необходимо перейти к полному проекту. В следующем разделе показано, как.

Создание первого проекта с помощью Ionide

Для более крупных программ, скомпилированных библиотек или кода, которые вы хотите распространить как приложение, вы будете использовать проект .NET. Чтобы создать проект F#, откройте командную строку и создайте проект с помощью .NET CLI:

dotnet new console -lang "F#" -o FirstIonideProject

После завершения измените каталог на проект и откройте Visual Studio Code:

cd FirstIonideProject
code .

После загрузки проекта в Visual Studio Code откроется область обозревателя решений F# в левой части окна. Это означает, что Ионида успешно загружает только что созданный проект. Вы можете написать код в редакторе до этого момента времени, но как только это произойдет, все готово к загрузке.

Объяснение кода

Если вы не уверены в том, что на самом деле делает код, вот пошаговые инструкции.

Как видно, toPigLatin — это функция, которая принимает слово в качестве входных данных и преобразует его в Pig-Latin представление этого слова. Ниже приведены правила для этого.

Если первый символ в слове начинается с гласного, добавьте "yay" в конец слова. Если он не начинается с гласной, переместите первый символ в конец слова и добавьте "ay" в него.

Возможно, вы заметили следующее в FSI:

val toPigLatin: word: string -> string

Это указывает, что toPigLatin является функцией, которая принимает string в качестве входных данных (называется word), и возвращает еще один string. Это называется сигнатурой типа функции, которая является основным элементом F# и ключом к пониманию кода F#. Вы также заметите это, если наведите указатель мыши на функцию в Visual Studio Code.

В тексте функции вы заметите две отдельные части:

  1. Внутренняя функция, вызываемая isVowel, которая определяет, является ли заданный символ (c) гласным, проверяя, соответствует ли он одному из предоставленных шаблонов с помощью сопоставления шаблонов:

    let isVowel (c: char) =
        match c with
        | 'a' | 'e' | 'i' | 'o' | 'u'
        | 'A' | 'E' | 'I' | 'O' | 'U' -> true
        |_ -> false
    
  2. Выражение if..then..else, которое проверяет, является ли первый символ гласным, и создает возвращаемое значение из входных символов на основе того, был ли первый символ гласным или нет:

    if isVowel word[0] then
        word + "yay"
    else
        word[1..] + string(word[0]) + "ay"
    

Поток toPigLatin выглядит следующим образом:

Проверьте, является ли первый символ входного слова гласным. Если это так, прикрепите "yay" к концу слова. В противном случае переместите первый символ в конец слова и добавьте "ay" в него.

Последнее, что стоит отметить: в F# нету явной инструкции для возвращения из функции. Это связано с тем, что F# основан на выражениях, а последнее выражение, вычисляемое в теле функции, определяет возвращаемое значение этой функции. Так как if..then..else является выражением, оценка текста блока then или текста блока else определяет значение, возвращаемое функцией toPigLatin.

Превратите консольное приложение в генератор Pig Latin

В предыдущих разделах этой статьи показан общий первый шаг написания кода F#: написание начальной функции и его интерактивное выполнение с помощью FSI. Это называется разработкой на основе REPL, где REPL означает "Цикл чтенияEvaluate-Print". Это отличный способ поэкспериментировать с функциональностью, пока у вас есть что-то рабочее.

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

Чтобы начать, откройте файл Program.fs, созданный ранее с помощью .NET CLI. Вы заметите, что некоторый код уже присутствует.

Затем создайте новый module с именем PigLatin и скопируйте созданную ранее функцию toPigLatin в нее следующим образом:

module PigLatin =
    let toPigLatin (word: string) =
        let isVowel (c: char) =
            match c with
            | 'a' | 'e' | 'i' | 'o' | 'u'
            | 'A' | 'E' | 'I' | 'O' | 'U' -> true
            |_ -> false
        
        if isVowel word[0] then
            word + "yay"
        else
            word[1..] + string word[0] + "ay"

Этот модуль должен быть выше функции main и ниже объявления open System. Порядок объявлений имеет значение в F#, поэтому перед вызовом функции в файле необходимо определить функцию.

Теперь в функции main вызовите функцию генератора Pig Latin, используя аргументы:

[<EntryPoint>]
let main args =
    for arg in args do
        let newArg = PigLatin.toPigLatin arg
        printfn "%s in Pig Latin is: %s" arg newArg

    0

Теперь вы можете запустить консольное приложение из командной строки:

dotnet run apple banana

И вы увидите, что он выводит тот же результат, что и файл скрипта, но на этот раз как запущенная программа!

Устранение неполадок Ionide

Ниже приведены несколько способов устранения некоторых проблем, с которыми можно столкнуться:

  1. Чтобы получить функции редактирования кода Ionide, файлы F# необходимо сохранить на диске и в папке, открытой в рабочей области Visual Studio Code.
  2. Если вы внесли изменения в систему или установили предварительные требования Ionide с открытым кодом Visual Studio Code, перезапустите Visual Studio Code.
  3. Если у вас есть недопустимые символы в каталогах проектов, Ionide может не работать. Переименуйте каталоги проектов, если это так.
  4. Если ни одна из команд Ionide не работает, проверьте назначения клавиш Visual Studio Code, чтобы узнать, не переопределяете ли вы их по ошибке.
  5. Если Ionide не работает на вашем компьютере и ни одно из приведенных выше решений не помогло, попробуйте удалить каталог ionide-fsharp на вашем компьютере и переустановить пакет плагинов.
  6. Если не удалось загрузить проект (обозреватель решений F# отобразит это), щелкните его правой кнопкой мыши и щелкните Просмотреть сведения, чтобы получить дополнительные диагностические сведения.

Ионида — это проект с открытым исходным кодом, созданный и поддерживаемый членами сообщества F#. Сообщите о проблемах и не стесняйтесь вносить свой вклад в репозиторий ionide-vscode-fsharp GitHub.

Вы также можете обратиться за дополнительной помощью у разработчиков Ionide и в сообществе F# в канале Ionide Gitter.

Дальнейшие действия

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