Guard (počítačová věda) - Guard (computer science)
V programování počítače, je stráž je boolean výraz , který se musí vyhodnotit na hodnotu true v případě, že provádění programu je pokračovat v pobočce v pochybnost.
Bez ohledu na to, jaký programovací jazyk se používá, je ochranná klauzule , ochranný kód nebo ochranný příkaz kontrolou předpokladů integrity použitých k zabránění chybám během provádění. Typickým příkladem je kontrola, zda reference, která má být zpracována, není null, čímž se zabrání selhání nulového ukazatele. Mezi další použití patří použití booleovského pole pro idempotenci (takže následná volání jsou nops), jako ve vzoru dispose . Strážný poskytuje předčasné ukončení z podprogramu , a je běžně používaný odchylka od strukturovaného programování , odstraní jednu úroveň vnoření a což má za následek plošší kódu: výměna if guard { ... }s if not guard: return; ....
Termín se používá se specifickým významem v programovacích jazycích APL , Haskell , Clean , Erlang , occam , Promela , OCaml , Swift , Python od verze 3.10 a Scala . V Mathematice se strážcům říká omezení . Stráže jsou základním pojmem v Guarded Command Language , jazyce formálních metod . Ochrany lze použít k rozšíření shody vzoru o možnost přeskočit vzor, i když se struktura shoduje. Booleovské výrazy v podmíněných příkazech obvykle také vyhovují této definici strážce, ačkoli se jim říká podmínky .
V následujícím Haskellově příkladu se stráže vyskytují mezi každou dvojicí "|" a "=":
f x
| x > 0 = 1
| otherwise = 0
To je podobné příslušnému matematickému zápisu:
V tomto případě jsou stráže v klauzulích „pokud“ a „jinak“.
Pokud existuje několik paralelních ochran, jako ve výše uvedeném příkladu, jsou obvykle zkoušeny v pořadí shora dolů a je vybrána větev prvního průchodu. Stráže v seznamu případů jsou obvykle paralelní.
V Haskellově seznamu jsou však stráže v sérii a pokud některý z nich selže, prvek seznamu se nevytvoří. To by bylo stejné jako kombinace jednotlivých ochranných prvků s logickým AND , kromě toho, že mezi strážci mohou existovat další klauzule o porozumění seznamu.
Vývoj
Jednoduchý podmíněný výraz, který je již v CPL přítomen v roce 1963, má stráž na prvním podvýrazu a další podvýraz, který se použije v případě, že první nelze použít. Některé běžné způsoby, jak napsat toto:
(x>0) -> 1/x; 0 x>0 ? 1/x : 0
Pokud může být druhý podvýraz dalším jednoduchým podmíněným výrazem, můžeme před posledním propadem poskytnout více alternativ, které můžeme vyzkoušet :
(x>0) -> 1/x; (x<0) -> -1/x; 0
V roce 1966 měl ISWIM formu podmíněného vyjádření bez povinného pádového případu, čímž se stráž oddělila od konceptu volby buď-nebo. V případě ISWIM, pokud nelze použít žádnou z alternativ, hodnota měla být nedefinována , což bylo definováno tak, aby se nikdy nepočítal do hodnoty.
KRC , „miniaturizovaná verze“ SASL (1976), byla jedním z prvních programovacích jazyků, které používaly termín „stráž“. Jeho definice funkcí mohla mít několik klauzulí a ta, která měla být použita, byla vybrána na základě stráží, které následovaly po každé klauzuli:
fac n = 1, n = 0
= n * fac (n-1), n > 0
Používání ochranných doložek a výrazu „strážní doložka“ se datuje přinejmenším do praxe Smalltalk v 90. letech, jak ji kodifikoval Kent Beck .
V roce 1996 přijal Dyalog APL alternativní čistě funkční styl, ve kterém je stráž jedinou kontrolní strukturou. Tento příklad v APL vypočítá paritu vstupního čísla:
parity←{
2∣⍵ : 'odd'
'even'
}
Strážce vzoru
Kromě ochranného krytu připojeného ke vzoru může chránič vzoru odkazovat na použití shody vzorů v kontextu ochranného prvku. Ve skutečnosti shoda vzoru znamená přihrávku. Tento význam představil v návrhu pro Haskella Simon Peyton Jones s názvem Nový pohled na stráže v dubnu 1997 a byl použit při implementaci návrhu. Tato funkce poskytuje možnost používat vzory v chráničích vzoru.
Příklad v rozšířeném Haskellu:
clunky env var1 var2
| Just val1 <- lookup env var1
, Just val2 <- lookup env var2
= val1 + val2
-- ...other equations for clunky...
To by znělo: „Neohrabaný pro prostředí a dvě proměnné, v případě, že vyhledávání proměnných z prostředí vytváří hodnoty , je součtem hodnot ...“ Stejně jako v porozumění seznamu jsou stráže v sérii, a pokud některý z nich selže, pobočka není přijata.
Příklad
public string Foo(string username) {
if (username == null) {
throw new ArgumentNullException(nameof(username));
}
// Rest of the method code follows here...
}
Viz také
Reference
externí odkazy
- Guard in Free On -Line Dictionary of Computing - FOLDOC , Denis Howe (editor).
- Ochranná doložka , WikiWikiWeb
- Zpráva Haskella 98 , kapitola 3 Výrazy .
- Kniha Mathematica, část 2.3.5 Ukládání omezení na vzory
- Uživatelská příručka kompilačního systému Glorious Glasgow Haskell , verze 6.4, část 7.3.2. Strážci vzorů