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

Example of F# Interactive output with 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 сообщает 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 это выражение, оценка текста блока или тела thenelse блока определяет значение, возвращаемое 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-fsharp каталог на компьютере и переустановить набор подключаемых модулей.
  6. Если не удалось загрузить проект (Обозреватель решений F# отобразится это), щелкните правой кнопкой мыши этот проект и нажмите кнопку "Просмотреть сведения", чтобы получить дополнительные диагностические сведения.

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

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

Следующие шаги

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