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


Начало работы с 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# в левой части окна. Это означает, что Ионида успешно загружает только что созданный проект. Вы можете написать код в редакторе до этого момента времени, но как только это произойдет, все готово к загрузке.

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

После настройки Visual Studio Code для использования скриптов .NET Core перейдите в представление обозревателя в Visual Studio Code и создайте новый файл. Назовите его 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 знать, когда код завершится.

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

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

Как видно, 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#.