Ő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
- Őr az ingyenes online számítástechnikai szótárban - FOLDOC , Denis Howe (szerkesztő).
- Guard szakasz , WikiWikiWeb
- A Haskell 98 jelentés , 3. fejezet Kifejezések .
- A Mathematica könyv, szakasz 2.3.5 Elhelyezés megszorítások Minták
- A Glorious Glasgow Haskell Compilation System felhasználói kézikönyv , 6.4 -es verzió, 7.3.2. Mintaőrök