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

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

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

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

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

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

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

cd FirstIonideProject
code .

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

Написание первого скрипта

после настройки Visual Studio Code для использования сценариев .net Core перейдите в представление обозревателя в Visual Studio Code и создайте новый файл. Назовите его мифирстскрипт. 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# Interactive с помощью 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 будет узнавать, когда код завершен.

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

Если вы не знаете, что делает код, выполните следующие действия.

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

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

Вы могли заметить следующее в 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Таким образом, поток:

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

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

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

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

Следующим шагом в разработке на основе 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 # покажет это), щелкните правой кнопкой мыши этот проект и выберите команду Просмотреть подробности , чтобы получить дополнительные диагностические сведения.

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

Кроме того, вы можете обратиться за помощью к разработчикам Ionide и сообществу F # в канале Ionide gitter.

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

Чтобы узнать больше о F # и функциях языка, ознакомьтесь с обзором f #.