Guard (информатика) - Guard (computer science)

В компьютерном программировании сторожить это логический выражение это должно быть истинным, если выполнение программы должно продолжаться в рассматриваемой ветви.

Независимо от того, какой язык программирования используется, охранная оговорка, код охраны, или же заявление охранника, это проверка целостности предварительные условия используется, чтобы избежать ошибок во время выполнения. Типичный пример - проверка того, что ссылка, которая должна быть обработана, не является нулевой, что позволяет избежать сбоев нулевого указателя. Другие варианты использования включают использование логического поля для идемпотентность (так что последующие вызовы - nops), как в шаблон утилизации. Охранник обеспечивает ранний выход из подпрограмма, и является часто используемым отклонением от структурное программирование, удаляя один уровень вложенности и приводя к более плоскому коду:[1] замена если охранник {...} с если не охранник: вернуться; ....

Термин используется в особом значении в APL, Haskell, Чистый, Erlang, Оккам, Промела, OCaml, Быстрый[2] и Scala языки программирования.[нужна цитата ] В Mathematica, охранники называются ограничения. Охранники - фундаментальное понятие в Защищенный командный язык, язык в формальные методы. Стражи можно использовать для аугментации сопоставление с образцом с возможностью пропустить шаблон, даже если структура совпадает. Логические выражения в условные утверждения обычно также подходят под это определение охранника, хотя их называют условия.

В следующем примере Haskell охранники встречаются между каждой парой "|" и "=":

ж Икс | Икс > 0 = 1 | иначе = 0

Это похоже на соответствующие математические обозначения:

В этом случае меры предосторожности находятся в пунктах «если» и «иначе».

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

Однако в Haskell составить список охранники включены последовательно, и если какой-либо из них выходит из строя, элемент списка не создается. Это будет то же самое, что объединить отдельные охранники с логическое И, за исключением того, что среди охранников могут быть другие пункты понимания списка.

Эволюция

Простое условное выражение, уже присутствующее в CPL в 1963 году есть защита для первого подвыражения и еще одно подвыражение на случай, если первое не может быть использовано. Некоторые распространенные способы написать это:

(х> 0) -> 1 / х; 0x> 0? 1 / х: 0

Если второе подвыражение может быть еще одним простым условным выражением, мы можем дать больше альтернатив, которые нужно попробовать перед последним провалиться:

(х> 0) -> 1 / х; (х <0) -> -1 / х; 0

В 1966 г. Я ПЛАВАЮ имел форму условного выражения без обязательного провала, тем самым отделяя охрану от концепции выбора либо-либо. В случае ISWIM, если ни одна из альтернатив не могла быть использована, значение должно было быть неопределенный, который был определен так, чтобы никогда не преобразовывать в значение.

KRC, "миниатюрная версия"[3] из SASL (1976), был одним из первых языков программирования, в котором использовался термин «охрана». Его определения функций могут иметь несколько предложений, и тот, который нужно применить, выбирался на основе мер защиты, следующих за каждым предложением:

 фак п = 1,               п = 0       = п * фак (п-1),   п > 0

Использование защитных оговорок и термина «защитная оговорка» датируется как минимум Болтовня практика в 1990-х годах, как кодифицировано Кент Бек.[1]

В 1996 году Dyalog APL принял альтернативный чисто функциональный стиль, в котором охрана является единственной управляющей структурой.[4] В этом примере в APL вычисляется четность входного числа:

паритет{        2 : 'странный'              'четное'        }

Узор охранник

Помимо охранника, прикрепленного к выкройке, шаблон охранник может относиться к использованию сопоставление с образцом в контексте охранника. Фактически, совпадение с шаблоном означает «пройден». Это значение было введено в предложение для Haskell Саймон Пейтон Джонс названный Новый взгляд на охранников в апреле 1997 г. и был использован при реализации предложения. Функция предоставляет возможность использовать выкройки в щитках выкройки.

Пример в расширенном Haskell:

 неуклюжий env var1 var2 | Только val1 <- искать env var1 , Только val2 <- искать env var2 = val1 + val2 - ... другие уравнения для неуклюжего ...

Это будет выглядеть так: «Неуклюжий для среды и двух переменных, в случае, если поиск переменных из среды дает значения, - сумма значений. ..." Как в составить список, охранники идут последовательно, и в случае отказа одного из них ветка не берется.

Пример

общественный нить Фу(нить имя пользователя) {    если (имя пользователя == ноль) {        бросать новый ArgumentNullException(Имя(имя пользователя));    }    // Остальной код метода следует здесь ...}

Смотрите также

Рекомендации

  1. ^ а б Бек, Кент (1997). «Охранная оговорка». Шаблоны передовой практики Smalltalk,. С. 178–179.
  2. ^ Повар, Нейт. "охранять и откладывать". NSHipster. Получено 2016-02-26.
  3. ^ Тернер, Д.А. "Немного истории языков функционального программирования" (PDF).
  4. ^ Скоулз, Джон. «Прямые функции в Dyalog APL» (PDF).

внешняя ссылка