Использование условной логики для создания нескольких путей выполнения

Завершено

Предположим, что у вас есть программа, которая создает файл резервной копии для файлов в определенной папке. Программа состоит из нескольких строк кода, который находит и сжимает набор файлов. Как добавить в эту программу логику, создающую файл резервной копии, только если в этот день резервная копия еще не создавалась? Для этого у программы должен быть способ проверить выполнение этого условия (создавалась ли резервная копия) и, если условие выполнено, произвести другое действие (не выполнять резервное копирование, если файл резервной копии за этот день существует).

Создание ветви кода с помощью конструкции if

Конструкция if вычисляет логическое выражение. Если выражение вычисляется как true, программа запускает определенную ветвь кода. Синтаксис конструкции if выглядит следующим образом.

if <condition> then <expression>

Возьмем для примера более длинный код.

let age = 66
if age > 65 
then printfn "Senior citizen"

Определение альтернативной ветви с помощью предложения else

if Если инструкция вычисляется как false, используйте else предложение с if конструкцией для запуска другой ветви кода.

Предложение else можно использовать следующим образом.

let age = 66
if age > 65 
then printfn "Senior citizen"
else printfn "Citizen"

Использование конструкции if в качестве выражения

Вы уже знаете, как можно использовать if и else для создания в коде различных ветвей. Когда код включает разные ветви, он выдает разный результат в зависимости от того, имеет ли логическое условие значение true или false. Возможно, вы не знаете, что при выполнении выражения создается значение.

Если код написан так, как в этом примере, результат становится понятным:

let age = 64
let message = if age > 65 then "Senior citizen" else "Citizen"
printfn "%s" message

В этом случае if и else работают больше как тернарное выражение. Если условие имеет значение true, возвращается одно значение. Если это falseтак, возвращается другое значение. В любом случае возвращается значение. Факт, истинный для всех if выражений.

Давайте рассмотрим предыдущий пример кода и рассмотрим его в фоновом режиме:

let age = 66
if age > 65 then printfn "Senior citizen" else printfn "Citizen"

Это тот же пример кода, который вы уже видели, но теперь if и else находятся на одной строке. Так как важные действия printf операции происходят в функции, функция не обязательно возвращает фактическое значение. Поэтому возвращаемое значение выражения создает значение printfn "Senior citizen" типа unit.

Примечание.

unit — это значение, которое выступает как заполнитель, когда фактическое значение не возвращается. Его можно представить как void или None.

Кроме того, нужно помнить о том, что типы смешивать нельзя. if и else должны возвращать один и тот же тип данных, иначе возникнет ошибка. Например, нельзя писать код так, как в следующем примере.

let someCondition = true
let value = if someCondition then "hello" else 1 // not allowed

В этом случае if определяет, что тип возвращаемого значения — string, поэтому else не может изменить этот тип на int. Чтобы приведенный выше код работал, его нужно изменить.

let someCondition = true
let value = if someCondition then "hello" else "1" // allowed

Использование конструкции elif

Вы уже знаете, как работает if и else. elif — это еще одна конструкция, которую можно использовать так же, как if. Как и if, конструкция elif принимает логическое значение и должна добавляться сразу после if. Конструкция elif выполняется, когда if условие вычисляется как false. Вот пример использования elif.

let cardValue = 1
let cardDescription = if cardValue = 1 then "Ace" elif cardValue = 14 then "Ace" else "A card"
printfn "%s" cardDescription