A programozás stílusa

Íme a Prolog Development Center (PDC) cégnél kifejlesztett Visual Prolog programozási stílusáról szóló ajánlások.

Ezek az ajánlások az újonnan létrehozott kódokra vonatkoznak. Ebben az esetben a PDC nem tervezi, hogy a már meglévő kódokat be tudja tartani ezeknek az ajánlásoknak. Ezért a Visual Prolog programozási rendszerrel elosztott kódok esetleg nem felelnek meg ezeknek a szabványoknak.

Általános ajánlások

  • A predikátumok záradékainak rendszerint 20 sor alatt kell lenniük. Ezért további algoritmusok létrehozására van szükség a szubrutinok megszervezéséhez. Olyan helyzetek esetén, ahol a predikátum több mint 20 vonalat foglalhat el, olyan esetekre utal, mint például 50 objektumot kell beállítani ugyanarra az objektumra, hivatkozva rá.
  • Használj teljesen minősített neveket (vagyis valamilyen Class :: módszert) - ez mindig a program világosabb megjelenését teszi lehetővé.
  • Az osztálymódszereknek olyan értelmes nevekkel kell rendelkezniük, amelyeket az osztálynévvel együtt olvasnak. Kerülje az osztálynév megismétlését a módszer nevében, azaz a névnek:
  • A predikátumnak pontosan egy feladatot kell végrehajtania. Ezért, ha van olyan predikátum, ami a lista minden elemével valamit tesz, akkor fontolja meg annak lehetőségét, hogy két predikátumra felosztja: az egyik átmegy a listán, és a második műveletet hajt végre az elemen. Ennek a megközelítésnek az az előnye, hogy a predikátum egyszerűbbé válik (és ennélfogva könnyebb módosítani és megérteni).
  • Általában, ha egy egyenlő jel ("=") egyik oldalán változónak kell lennie, akkor helyezze jobbra. ha csatlakoztatva van.

Boolean értékek

Boolean értékeket kell használni, ha valami igaz vagy hamis. Ne használja ezeket az értékeket az esetek, például a bal és jobb oldali, vagy vízszintes és függőleges eltérések megállapításához. Ilyen esetekben jobb szakterületeket használni.

Nyírás (Cut)

A vágás (azaz) egy olyan predikátum, amely kiküszöböli a nondeterminizmust, vagyis megszünteti a további megoldások (a saját nevének megfelelően) kifejlesztésének lehetőségét.

A vágott nondeterminizmus két csoportra osztható (bár egyes esetekben a vágás mindkettőhöz tartozhat):

  • Azok a vágások, amelyek lecsökkentik az aktuális predikátum más (következő sorrendben) záradékait.
  • Ami kiküszöböli annak lehetőségét, hogy új megoldásokat generáljon a nem-determinisztikus predikciós hívások számára.

Nincsenek más jelentős okok a vágás használatára, kivéve a fent említett kettőt. Ha ezek a célok világosak, akkor nagyon könnyű a megfelelő helyre vágni:

  • vagy a levágást olyan helyen helyezték el, ahol már nem szükséges az egymást követő záradékok keresése és / vagy
  • ezután egy nem meghatározható (vagyis minősítő, nem-határozott vagy több) predikátumot hívunk fel, amelyre csak egy megoldás fontos.

Az első okot a következő példa szemlélteti

Ebben a példában az X> 13 ellenőrzése után van egy kivágás. Ez egy tipikus esetben az első ok használata: "A mi záradékaink a beadott változó értékére reagálnak és azonnal (ahol azonnal azt jelenti, hogy azonnal az X> 13 ellenőrzése után) megtaláljuk a megfelelő megoldást."

Általában az ilyen vágások közvetlenül a záradék feje fölött vagy az ellenőrzés után helyezkednek el, legközelebb a záradék fejéhez.

A második okot a következő példa szemlélteti:

Ebben a példában a kivágást közvetlenül a nondeterminisztikus predikátum után helyezzük el, amelyből egyetlen megoldást várunk.

A fenti feliratot kétszer is feltüntettük, mert a vágó helyén található kulcsszó a szó azonnal. azokat a lehető leghamarabb el kell helyezni a záradékban.

Gyanúsnak kell lenni a több vágást tartalmazó záradékokkal kapcsolatban. Egynél több leütés jelenléte egy záradékban gyakran azt jelzi, hogy hiba van a programban.

Piros és zöld vágás

Általánosságban elmondható, hogy nem ösztönözzük a zöld vágásokat, hanem a piros vágást is.

A hagyományos Prolog közössége meghatározta a vörös és zöld vágásokat. Röviden: a zöld vágás olyan vágás, amely nem változtatja meg a predikátum szemantikáját, amelyben használják, és a piros vágás megváltoztatja a szemantikát.

Nyilvánvaló, hogy minden, a nondeterminisztikus predikátum minden későbbi megoldását elvágó kivágás természeténél fogva piros. Ezért a vörös és a zöld kivágás közötti különbség csak azoknál a vágásoknál értelmezhető, amelyek megakadályozzák a következő visszautasításokat.

A fenti predikátumban a kivágás zöld. mivel ha töröljük, a predikátum ugyanúgy viselkedik. Amikor a vágás az első mondatban van, ellenőrizze az X-et <= 0 во втором клаузе в действительности не нужна (второй клауз соответствует всем остальным случаям, кроме X<0 - прим. Переводчика):

De anélkül, hogy ezt az ellenőrzést, azonban a nyírás kipirosodik, mint most az állítmány lesz másképp viselkednek, ha eltávolítjuk a cut-off (állítmány válik határozatlan, mert még ha X> 0, van más megoldás - nos, ha ártalmatlan - kb. tolmács).

A zöld kaszálás feleslegesnek tűnhet, de a valóságban kizárják a szükségtelen visszahúzódásokat (főleg a sebesség miatt). A Visual Prolog rendszerben azonban meg kell jeleníteniük a fordítót, hogy bizonyos predikátumok bizonyos típusú predikátumok, például eljárások.

Vezérlés a bemeneti adatok kombinációjával

A bemeneti adatok (diszpécsés) kombinációjának vezérlését óvatosan kell használni. A beviteli folyamatok használatának problémája, hogy ez az egyszerű szerkezet sok különböző helyzetre reagálhat. Ezért a logikailag szorosan összefüggő kódokat viszonylag független töredékekre kell osztani, egymás után rendezve.

Ebben az esetben a logikailag kapcsolódó kódok ugyanabba az osztálymodulba tartozó feldolgozó predikátumokba kerülnek, így a diszpécser csak azokat hívja. Ebben az esetben a diszpécser maga és a feldolgozási kódok szoros kapcsolatban maradnak.

Az ilyen irányítás érdekében ajánlott követni a szabályokat:

  • Ha a predikátum kezeli a bemeneti adatkészletek sok változatát, mindegyik változatot egyszerűen támogatja.
  • Soha ne hozz létre több pontot ugyanarra a bemeneti változatra, ha a predikátum más eseteket is kezel.

Az első szabály a közvetlen cselekvés szabálya. A második szabályt a következő példa szemlélteti:

A fenti szakaszok rossz stílussal vannak írva, mert ugyanazon a bemeneti készleten két záradék van (17, W, E, R, 13, Y). Nem lenne szörnyű, ha a predikátum csak ezzel a készlettel dolgozott. De itt vannak záradékok más készletekre. Úgy véljük, hogy egy ilyen predikátumot újra kell írni, hogy a qwerty predikátum minden egyes szakasza csak egy speciális bemeneti készletre reagáljon, és a feldolgozás többi részét alacsonyabb szintű predikátumokra hagyja:

Ebben a kódban a qwerty predikátum most órákat tartalmaz, amelyek mindegyike a bemeneti adatok bizonyos kombinációjára válaszol. Nem feltétlenül szükséges, hogy a bemeneti adatok egyes kombinációi esetén egyetlen predikciós hívást használjunk. A legfontosabb dolog az, hogy nem ugyanazon a bemeneti adatcsomagon keresztül járunk el.

Ez a szabály különösen hasznos az eseménykezelők építésénél - egynél több záradékkal nem rendelkezhet a "közeli" esemény (vagy hasonló) ugyanazon kezelőben. Az eseménykezelő gyakran található több képernyőre, így ha nem követi a szabályt, a kezelés egyik típusú input készletek egy záradék, akkor meg kell, hogy az összes kikötések felvezető, hogy megtudja, hogyan iterált keresztül a konkrét input.

Kivételek és hibák kezelése

  • Ha hiba vagy kivétel lép fel, kivételes kivétellel alkalmazza a kivétel :: emelést.
  • Ha feldolgozni szeretné, tiltsa le a kivétel csapdáját.
  • Végül használd, ha valamilyen kódot kell futtatnia, még akkor is, ha kivétel történik, majd folytassa a kivételt.
  • Ismerje meg az Except Handbook-ot.

Belső és egyéb hibák

Meg kell különböztetni a belső hibákat és a csomagok, modulok, osztályok vagy összetevők használatával kapcsolatos hibákat. Ha a belső invariancia sérül, akkor ez egy belső hiba. A belső hibák jellemző példái:

  • Az adatbázis meghatározásának tényét nem igazán határozzák meg.
  • A predikátum, amely eljárásnak kellene lennie, de a fordító nem tudja felismerni ezt, egy "üresjárati" záradék hozzáadásával egy eljárásba alakul. Ha ilyen rágalmazás érhető el, akkor abból a tényből ered, hogy a feltételezés, hogy az előző záradékot nem lehet sikeresen befejezni, helytelen volt.

A belső hibáknak egy kivételt kell létrehozniuk. A kivételek használata az alapelvet követi: minden felhasználó hiba, és minden egyes belső hiba esetén.

Tipikus felhasználói hibák:

  • Index kimenet a megengedett tartományon túl
  • "rossz" mutató az ablakhoz
  • a predikátumok sorrendjének megsértése

A program blokkolása (próbálkozás / fogás) két okból biztosítható:

  • Van egy vágy a kivétel kezelésére. Például, ha megnyit egy fájlt, megszakítás történik, jelezve, hogy a fájl nem létezik. Ebben az esetben fennáll annak a vágya, hogy blokkolja a program befejezését és jelezzen néhány hibaüzenetet, amely jelzi, hogy a fájl nem létezik. Természetesen, ha egy ilyen kivétel nem az egyetlen lehetséges, akkor kivételt kell folytatni.
  • Van vágy, hogy tegyen valamit, függetlenül attól, hogy a predikátum megszakadt-e. Egy tipikus példa az, hogy blokkol valamit (megragad egy erőforrást), majd tennél valamit, és végül állítsd vissza a zárat (engedje el az erőforrást). Itt meg kell győződnie arról, hogy a zár visszaállításra kerül (az erőforrás felszabadul), még akkor is, ha a végrehajtás megszakad. Ehhez próbáld végül használni.

A bemeneti kimenetek típusai és áramai

A predikátumok alapértelmezés szerint egy eljárástípust tartalmaznak. Nem szükséges a minősítő eljárás megírását addig, amíg ez nem szükséges (de ebben az esetben szükség lehet a predikátum név megváltoztatásának szükségességére).

Alapértelmezés szerint az összes predikciós argumentum be van adva. A fel nem használt I / O kombinációkat nem szabad írni.

Az érvekkel közvetlenül használhatók a selejtezők [in] és [out]. Ne írjon be. mert az argumentumok az alapértelmezett bemenetek.

Ha a szúrásnak csak egy változata van a bemeneti és kimeneti áramoknak, akkor ki kell használnia a [out] -t a sablon helyett.

Alapesetben a tények nem meghatározóak - nem határozott. Ne írjon meg határozatlanul. ha erre nincs különösebb szükség (de talán meg kellene fontolnod a tény nevének megváltoztatását).

Kapcsolódó cikkek