Модификация приложения F #: match



 

Полностью рабочее приложение будет вовсю использовать директивы open и ссылаться на библиотеки компонентов .NET. Нам понадобятся Ссылки; для добавления ссылок выполним: Проект -> Добавить ссылку...:

 

В открывшемся окне переходим на вкладку . NET:

 

Рис. 3. 1. Добавление ссылки: добавляем ссылку на компоненты Windows Forms

 

Нам понадобятся:

 

System . Windows . Forms;

System . Data;

System . Drawing;

 

Так будет выглядеть папка «Ссылки» проекта в итоге:

 

Остальное (библиотеки) будет добавляться использованием «open».

 

Для начала воспользуемся консолью для реализации следующей функциональности. В F# существует ключевое слово match. Выражение match позволяет управлять ветвлением на основе сравнения выражения с набором шаблонов. Пример:

 

// Выражение match

match test-expression with

| pattern1 [ when condition ] -> result-expression1

| pattern2 [ when condition ] -> result-expression2

| ...

 

// Шаблон функции

function

| pattern1 [ when condition ] -> result-expression1

| pattern2 [ when condition ] -> result-expression2

| ...

 

И так, реализуем начальную функциональность приложения. Пользователю предложат ввести символы, и на основе ввода будет выдан результат. Добавляем следующий код в файл Program . cs:

 

// Ключевое слово match: вывод армейских наименований взводов

// Используем библиотеку F#

open System

// Меняем заголовок окна консольного приложения

Console.Title <- "Различные примеры (F#) :: Вывод армейских наименований взводов"

// Меняем цвет отображения символов

Console.ForegroundColor <- ConsoleColor.Blue

Console.BackgroundColor <- ConsoleColor.Gray

// Выводим запрос

printfn "Введите букву латинского алфавита (от a до z):"

// Конвертируем введённые символы с заглавные символы

let chrletter = Char.ToUpper(Convert.ToChar(System.Console.ReadLine()))

// match использует переменную chrletter

match chrletter with

// Если значение chrletter "a" или "A", выводим "Alpha"

| 'A' -> printfn "Вам подходит: Alpha"

| 'B' -> printfn "Вам подходит: Bravo"

| 'C' -> printfn "Вам подходит: Charlie"

| 'D' -> printfn "Вам подходит: Delta"

| 'E' -> printfn "Вам подходит: Echo"

| 'F' -> printfn "Вам подходит: FoxTrot"

| 'G' -> printfn "Вам подходит: Golf"

| 'H' -> printfn "Вам подходит: Hotel"

| 'I' -> printfn "Вам подходит: India"

| 'J' -> printfn "Вам подходит: Juliet"

| 'K' -> printfn "Вам подходит: Kilo"

| 'L' -> printfn "Вам подходит: Lima"

| 'M' -> printfn "Вам подходит: Mike"

| 'N' -> printfn "Вам подходит: November"

| 'O' -> printfn "Вам подходит: Oscar"

| 'P' -> printfn "Вам подходит: Papa"

| 'Q' -> printfn "Вам подходит: Quebec"

| 'R' -> printfn "Вам подходит: Romeo"

| 'S' -> printfn "Вам подходит: Sierra"

| 'T' -> printfn "Вам подходит: Tango"

| 'U' -> printfn "Вам подходит: Uniform"

| 'V' -> printfn "Вам подходит: Victor"

| 'W' -> printfn "Вам подходит: Whiskey"

| 'X' -> printfn "Вам подходит: X-Ray"

| 'Y' -> printfn "Вам подходит: Yankee"

| 'Z' -> printfn "Вам подходит: Zulu"

// Если не буква

| _ -> printfn "Вы ввели символ не латинского алфавита"

printfn "\t\t\tНажмите клавишу Enter для продолжения..."

// Пауза

Console.ReadKey()

// Очищаем экран

Console.Clear()

 

Соответствующие шаблону выражения позволяют выполнять сложное ветвление на основе сравнения тестового выражения с набором шаблонов. В выражении match выражение test-expression по очереди сравнивается с каждым шаблоном, и когда соответствие найдено, вычисляется соответствующее выражение result-expression, а полученное значение возвращается в качестве значения выражения match.

Функция сопоставления шаблонов, продемонстрированная в предыдущей синтаксической конструкции, представляет собой лямбда-выражение (ключевое слово fun), в котором сопоставление шаблонов выполняется непосредственно в аргументе. Функция сопоставления шаблонов, продемонстрированная в предыдущей синтаксической конструкции, эквивалентна следующему:

 

arg функции ->

сопоставить arg с

| pattern1 [ если condition ] -> result-expression1

| pattern2 [ если condition ]-> result-expression2

| ...

 

Дополнительные сведения о лямбда-выражениях можно посмотреть здесь: Лямбда-выражения: ключевое слово fun (F#).

 

Полный набор шаблонов должен включать все возможные сочетания входной переменной. Очень часто шаблон с подстановочными знаками «_» используется в качестве последнего шаблона, чтобы обеспечить соответствие любым ранее не сопоставленным входным значениям.

 

Компилируем приложение (Debug) и запускаем. Вводим любой символ с латинской раскладки клавиатуры и получаем результат:

 

Рис. 3. 1. Результат работы приложения F#: работа match и вывод результата

 

Добавим следующий код ещё одного примера работы с match:

 

// Ключевое слово match: вывод календарного месяца

Console.Title <- "Различные примеры (F#) :: Вывод календарного месяца"

Console.ForegroundColor <- ConsoleColor.Blue

Console.BackgroundColor <- ConsoleColor.White

printfn "Введите числа в диапазоне от 1 до 12:"

let intmonth = Convert.ToInt32(System.Console.ReadLine())

// match использует переменную intmonth

match intmonth with

// Если значение intmonth = 1, выводим "Январь"

| 1 -> printfn "Вам подходит: Январь (31 день)"

| 2 -> printfn "Вам подходит: Февраль (28/29 дней)"

| 3 -> printfn "Вам подходит: Март (31 день)"

| 4 -> printfn "Вам подходит: Апрель (30 день)"

| 5 -> printfn "Вам подходит: Май (31 день)"

| 6 -> printfn "Вам подходит: Июнь (30 дней)"

| 7 -> printfn "Вам подходит: Июль (31 день)"

| 8 -> printfn "Вам подходит: Август (31 день)"

| 9 -> printfn "Вам подходит: Сетябрь (30 дней)"

| 10 -> printfn "Вам подходит: Октябрь (31 дней)"

| 11 -> printfn "Вам подходит: Ноябрь (30 дней)"

| 12 -> printfn "Вам подходит: Декабрь (31 день)"

| _ -> printfn "Вы ввели число не из диапазона"

printfn "\t\t\tНажмите клавишу Enter для продолжения..."

Console.ReadKey()

Console.Clear()

 

Рис. 3. 2. Результат работы приложения F#: работа match и вывод результата

 


Дата добавления: 2019-09-13; просмотров: 184; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!