Őr (informatika) - Guard (computer science)

A számítógép-programozás, a őr egy logikai kifejezést , hogy meg kell vizsgálnia, hogy igaz, ha a program végrehajtása folytatódik a fióktelep kérdéses.

Függetlenül attól, hogy melyik programozási nyelvet használják, a biztonsági záradék , a védőkód vagy a biztonsági nyilatkozat az integritás előfeltételeinek ellenőrzése, amelyeket a végrehajtás során fellépő hibák elkerülésére használnak. Egy tipikus példa annak ellenőrzése, hogy a feldolgozásra váró hivatkozás nem null, ami elkerüli a null-mutató hibákat. Más felhasználási módok közé tartozik a logikai mező használata az idempotenciához (tehát a későbbi hívások nopsak), mint a rendelkezési mintában . Az őr biztosít korai kilépés egy szubrutin , és egy általánosan használt eltérést strukturált programozás , eltávolítása egy szinten a fészkelő és eredményező laposabb kód: helyett if guard { ... }a if not guard: return; ....

A kifejezést sajátos jelentéssel használják az APL , Haskell , Clean , Erlang , occam , Promela , OCaml , Swift , Python 3.10 -es verzióból és a Scala programozási nyelvekben. A Mathematica -ban az őröket kényszereknek nevezik . Az őrök az alapfogalom az őrzött parancsnyelvben , amely a formális módszerek nyelve . A védőelemek használhatók a minta illesztésének növelésére, és lehetőség van a minta átugrására akkor is, ha a szerkezet megfelel. Logikai kifejezések feltételes állítások általában is illik ez a meghatározás egy őr, bár ők nevezik feltételek .

A következő Haskell -példában az őrök a "|" betűpárok között fordulnak elő. és "=":

f x
 | x > 0 = 1
 | otherwise = 0

Ez hasonló a megfelelő matematikai jelöléshez:

Ebben az esetben az őrök az "ha" és az "egyébként" záradékban vannak.

Ha több párhuzamos védő van, például a fenti példában, akkor általában felülről lefelé sorrendben próbálkoznak, és az első passzoló ágát választják. Az esetek listájában az őrök általában párhuzamosak.

A Haskell lista -megértésekben azonban az őrök sorba vannak kapcsolva, és ha bármelyikük sikertelen, a listaelem nem jön létre. Ez ugyanaz lenne, mint a különálló őrök kombinálása a logikai ÉS -el , azzal a különbséggel, hogy az őrök között lehetnek más listaértési záradékok is.

Evolúció

Egy egyszerű feltételes kifejezésnek, amely már a CPL-ben is szerepelt 1963-ban, van védője az első részkifejezésnél, és egy másik részkifejezés, amelyet arra az esetre kell használni, ha az első nem használható. Néhány gyakori módszer ennek írására:

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

Ha a második al-kifejezés lehet egy további egyszerű feltételes kifejezést, adhatunk több alternatívát kipróbálni, mielőtt az utolsó leesés :

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

1966-ban az ISWIM- nek feltételes kifejezési formája volt, kötelező esés nélkül, így elválasztva az őrt a vagy-vagy választásától. Az ISWIM esetében, ha egyik alternatíva sem volt használható, akkor az értéket definiálatlannak kell tekinteni , amelyet úgy határoztak meg, hogy soha ne számítson értékbe .

A KRC , a SASL (1976) "miniatürizált változata" az egyik első programozási nyelv volt, amely a "guard" kifejezést használta. Funkciódefiníciói több záradékot is tartalmazhatnak, és az alkalmazandóat az egyes záradékokat követő őrök alapján választották ki:

 fac n = 1,               n = 0
       = n * fac (n-1),   n > 0

A védelmi záradékok és az "őrzáradék" kifejezés legalább a 1990 -es évek Smalltalk gyakorlatába nyúlik vissza , Kent Beck kodifikációja szerint .

1996 -ban a Dyalog APL alternatív, tiszta funkcionális stílust alkalmazott, amelyben az őr az egyetlen vezérlőszerkezet. Ez a példa az APL -ben kiszámítja a bemeneti szám paritását:

parity{
        2 : 'odd'
              'even'
        }

Mintaőr

Amellett, hogy egy őr csatolt minta, minta őr utalhat a használata mintaillesztést keretében egy őr. Valójában a minta egyezése a passzt jelenti. Ezt a jelentést Simon Peyton Jones Haskell -javaslatában vezették be 1997 áprilisában, Az új nézet az őrökről címmel, és ezt használták a javaslat végrehajtásakor. Ez a funkció lehetővé teszi a minták használatát a minta védőburkolatában.

Példa a kiterjesztett Haskell -re:

 clunky env var1 var2
 | Just val1 <- lookup env var1
 , Just val2 <- lookup env var2
 = val1 + val2
 -- ...other equations for clunky...

Ez így hangzik: „nehézkes számára olyan környezetet és két változó esetén a kereséseket a változók a környezetből termék értéke , az értékek összege. ...” Ahogy lista comprehensions az őrök sorba, és ha bármelyikük kudarcot vall, az ágat nem veszik el.

Példa

public string Foo(string username) {
    if (username == null) {
        throw new ArgumentNullException(nameof(username));
    }
    // Rest of the method code follows here...
}

Lásd még

Hivatkozások

Külső linkek