Interested Article - Охрана (программирование)
- 2021-12-11
- 1
Охра́на ( охраня́ющее выраже́ние , охранное выражение ) — логическое выражение , которое предназначено для ограничения вычислительных процессов и выбора варианта вычислений. Обычно, используется в функциональных языках программирования (например, Haskell , Erlang ) .
Примеры охраняющих выражений
Все последующие охраняющие выражения приведены на функциональном языке Haskell , в котором эта технология используется очень часто. Все такие выражения выделены в кодах полужирным начертанием.
Пример 1 — Списковое включение
Функция
divisors
возвращает список
делителей
заданного числа
n
. Во второй строке определения показана охрана, которая ограничивает выбор элемента списка делителей
x
только таким значением, которое делит исходный параметр
n
без остатка.
divisors n = [x | x <- [1..(n - 1)], n `mod` x == 0]
Пример 2 — Охрана в теле функции
Функция
sign
возвращает знак заданного числа
x
. Охраняющие выражения записаны после символов (
|
). Они позволяют выбрать ту или иную альтернативу при вычислении знака числа. Такой способ охранения часто используется вместо механизма
сопоставления с образцом
, когда в функции нет возможности явно описать образец (например, в случае, если функция является обобщённой прикладной функцией для обработки значений некоторого
типа
, являющегося
экземпляром
какого-либо класса).
sign x | x < 0 = -1 | x == 0 = 0 | x > 0 = 1
Оформление в виде охраны позволяет в случае недопустимого выражения для сопоставления перейти к следующему. В случае, если предыдущий пример будет оформлен как оператор сопоставления с образцом, то при
x = 0
первое сопоставление (
x < 0
) вызовет ошибку, обработчик которой прекратит дальнейшие попытки на сопоставление. Кроме того, для случая неистинности всех выражений, удобно отлавливать такие ситуации установкой непосредственного значения истинности
True
. Для удобочитаемости, в стандартной библиотеке Prelude имеется константа otherwise, что внешне ещё более напоминает
переключатель
в алгоритмических языках.
См. также
Примечания
- .
Литература
- Душкин Р.В. Охрана // Приёмы программирования // Функции // Синтаксис и идиомы языка // Справочник по языку Haskell / Гл. ред. Д. А. Мовчан. — М. : ДМК Пресс , 2008. — С. 37-38. — 554 с. — 1500 экз. — ISBN 5-94074-410-9 .
- Чезарини Ф., Томпсон С. Программирование в Erlang = Erlang Programming. — М. : «ДМК Пресс», 2012. — С. 76-78. — 488 с. — ISBN 978-5-94074-617-1 .
- 2021-12-11
- 1