Мы можем создавать приложения на F# в текстовом редакторе и компилировать в консоли. Однако если мы работаем на Windows, то мы также можем использовать бесплатную и полнофункциональную среду разработки как Visual Studio Community, которая во многом упрощает создание и отладку приложения. Данную среду которую можно загрузить по следующему адресу: Microsoft Visual Studio.
После загрузки запустим программу установщика. В открывшемся окне нам будет предложено выбрать те компоненты, которые мы хотим установить вместе Visual Studio. Стоит отметить, что Visual Studio - очень функциональная среда разработки и позволяет разрабатывать приложения с помощью множества языков и платформ. В нашем случае нам будет интересовать прежде всего C# и .NET.
Чтобы добавить в Visual Studio поддержку проектов для C# и .NET, в программе установки среди рабочих нагрузок можно выбрать только пункт ASP.NET и разработка веб-приложений. Можно выбрать и больше опций или вообще все опции, однако стоит учитывать свободный размер на жестком диске - чем больше опций будет выбрано, соответственно тем больше места на диске будет занято.
И при инсталляции Visual Studio на ваш компьютер будут установлены все необходимые инструменты для разработки программ, в том числе фреймворк .NET.
После завершения установки создадим первую программу. Она будет простенькой. Вначале откроем Visual Studio. На стартовом экране выберем Create a new project (Создать новый проект)
На следующем окне в качестве языка выберем F#, а в качестве типа проекта укажем шаблон Console Application, то есть мы будем создавать консольное приложение на языке F#
Далее в поле Project Name дадим проекту какое-либо название. В моем случае это HelloApp. А также укажем папку, где будет располагаться проект.
На следующем окне Visual Studio предложит нам выбрать версию .NET, которая будет использоваться для проекта. Оставим установленную версию по умолчанию и нажмен на кнопку Create (Создать) для создания проекта.
После этого Visual Studio создаст и откроет нам проект:
В большом поле в центре, которое по сути представляет текстовый редактор, находится сгенерированный по умолчанию код F#.
Справа находится окно Solution Explorer, в котором можно увидеть структуру нашего проекта. В данном случае у нас сгенерированная по умолчанию структура: узел Dependencies - это узел содержит сборки dll, которые добавлены в проект по умолчанию. Эти сборки как раз содержат библиотеки .NET, которые могут использоваться в проекте F#.
Второй элемент структуры проекта - непосредственно сам файл кода программы Program.fs (Файлы с исходным кодом на языке F# помещаются в файлы с расширением .fs). Как раз этот файл и открыт в центральном окне.
Теперь вкратце разберем, что представляет собой автосгенерированный код файла Program.fs:
open System // Определяем функцию from, которая принимает параметр whom let from whom = sprintf "from %s" whom [<EntryPoint>] let main argv = let message = from "F#" // Вызываем функцию from printfn "Hello world %s" message 0 // возвращаем числовой код выхода из функции
Вначале идет вызов директивы open, которая подключает пространства имен. Пространства имен представляют собой организацию исходного кода в общие блоки. В данном случае подключается пространство имен System:
open System
После этого мы можем воспользоваться возможностями, которые предоставляет пространство имен System. Однако в данном автосгенерированном коде оно не используется, и в принципе эту строку в данном случае можно удалить.
Далее идет определение функции from:
let from whom = sprintf "from %s" whom
Определение функции начинается с ключевого слова let, после которого идет название функции, то есть в данном случае from
.
После названия функции идут параметры функции. Здесь для функции from
определен только один параметр - whom
, который представляет некоторую строку.
После знака равно = идут действия, выполняемые функцией: sprintf "from %s" whom
. Здесь применяется встроенная функция sprintf,
которая выполняет форматирование текста, то есть, грубо говоря, объединяет различные значения в одну строку. В данном же случае она будет вставлять в строку
"from %s" вместо символов %s
значение параметра whom
.
Дальше идет определение функции main, с которой будет начинаться выполнение программы:
[<EntryPoint>] let main argv = let message = from "F#" // Вызываем функцию from printfn "Hello world %s" message 0 // возвращаем числовой код выхода из функции
Чтобы указать, что функция является входной точкой в программу, то есть с нее будет начинаться выполняться программы, над ней указывается атрибут [<EntryPoint>]
Определение функции main
(также как и функции from) начинается с ключевого слова let, после которого указывается
название функции - main и далее название параметров - argv
.
Также как и в случае с функции from
, после знака равно (=) указываются действия, выполняемые функцией. Однако теперь функция main выполняет по сути три действия,
которые располагаются последовательно на трех строках.
Первое действие представляет вызов функции from
:
let message = from "F#"
Здесь с помощью оператора let определяется переменная message
, которая будет хранить результат вызова функции
from
. Как мы выше рассмотрели, функция from
принимает один параметр - некоторую строку и создает отформатированный текст
Здесь в качестве параметра whom
в функцию from передается строка "F#". Таким образом, функция from
будет создавать строку
"from F#". И эта строка будет храниться в переменной message
Второе действие представляет форматированный вывод на консоль:
printfn "Hello world %s" message
Встроенная функция printfn выводит на консоль некоторую строку. В данном случае такой строкой является "Hello world %s" message
. Здесь мы опять сталкиваемся с форматированием.
То есть в строку "Hello world %s"
вместо символов %s
будет вставляться содержимое переменной message
.
Выше исходя из кода мы увидели, что переменная message
будет представлять строку "from F#", поэтому в итоге на консоль будет выводиться текст
"Hello world from F#".
И в конце идет третье действие - выход из функции.
0 // возвращаем числовой код выхода из функции
Функция, которая представляет входную точку в программу, должна возвращать числовой код, как правило, это число 0. Чтобы возвратить из функции число, достаточно указать его на последней строке функции.
Кроме собственно кода в файле можно заметить комментарии, которые идет после двух слешей //
. При компиляции комментарии игнорируются и служат лишь
для информационной цели - чтобы видеть, для какой цели служит тот или иной код.
Теперь мы можем запустить на выполнение с помощью клавиши F5 или с панели инструментов, нажав на зеленую стрелку. В итоге при запуске приложения на консоль должна быть выведена строка "Hello World from F#".
Теперь изменим код файла на следующий:
open System // подключаемое пространство имен [<EntryPoint>] let main argv = printf "Введите свое имя: " let name = Console.ReadLine() // вводим имя printfn "Привет %s" name // выводим имя на консоль 0
По сравнению с автоматически сгенерированным кодом я внес несколько изменений. Теперь в функции main первой строкой выводится приглашение к вводу.
printf "Введите свое имя: "
На второй строке определяется переменная name
, в которую пользователь вводит информацию с консоли:
let name = Console.ReadLine()
Для получения ввода с консоли здесь используется встроенный класс Console платформы .NET, который находится в пространстве имен System.
Это пространство подключено в начале с помощью директивы open
. Без подключения пространства имен System я бы не смог использовать
класс Console и получить введенную с консоли строку. Однако в принципе нам необязательно подключать пространство имен.
Мы можем даже удалить первую строку open System
, но в этом случае мы тогда должны будем указать полный путь до
используемого класса. Например, в нашем случае мы могли бы написать: let name = System.Console.ReadLine()
.
Затем введенное имя выводится на консоль:
printfn "Привет %s" name
Теперь протестируем проект, запустив его на выполнение, также нажав на F5 или зеленую стрелочку.
Итак, мы создали первое приложение. Его скомпилированный файл можно найти на жестком диске в папке проекта в каталоге bin\Debug\net5.0
.
Оно будет называться по имени проекта и иметь расширение exe. И затем этот файл можно будет запускать без Visual Studio, а также переносить его
на другие компьютеры, где установлен .NET.