Модификация приложения 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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!