JLABS

VaxNt/ProDB.PGuide.Konvence

Programátorská příručka.Konvence

Bullet Množina existujících příkazů. Vyčerpávající seznam všech implementovaných příkazů by byl opravdu vyčerpávající. Proto v této příručce vyjmenujeme nejprve ty, které jsou frekventované a mají vyloženě obecné použití. Existuje řada "divokých" funkcí nebo specialit, které bylo nutno implementovat díky nějakým velmi neobvyklým vlastnostem aplikace. Navíc se postupně vyvíjel názor na syntax - existuje tedy řada variant kvůli zpětné kompatibilitě. Zde si klademe za cíl dát dostatečné informace pro toho, kdo chce psát nové skripty a teprve okrajově ev. upravovat nějaké staré a třebas obsolentní skripty z minulosti. Proto příručka obsahuje nejprve bázový přehled, potom výčet frekventovaných funkcí a potom teprve taxativní výčet všech funkcí - ten navíc nutně nebude nikdy úplný. Paralelně s jazykem skriptů je nutno ještě zvládnout popisy wizardů a jejich klauzulí.

Bullet Argument list. Funkce většinou očekávají podle své povahy jako argumenty seznamy oddělené čárkami. Řada funkcí umí zpracovávat iterativně seznam argumentů, dokud není vyčerpán. Kupříkladu set nebo setv zpracovávají vždy dvojici dokud se nenarazí na situaci, kdyby jméno cílové proměnné bylo prázdné. Je potřeba s tím počítat tehdy, kdy čárka může být součástí hodnoty. K tomu účelu jsou variantní příkazy, kde oddělovačem je rovnítko a seznam argumentů nemůže být iterován. Takové příkazy, například context.set, berou jako druhý argument jednoduše "zbytek řádku po rovnítku". Pozor na to, že i nevinně vypadající příkaz: context.set !X=Nález: $(Text) může při interpretaci nabubřet na neuvěřitelné bago, to když Text je třebas hodnota MEMO položky, třebas propouštěcí zprávy pacienta. Všimněte si i toho faktu, že interpret hodnotu proměnné dekóduje na zakódované backslashe, přilepí k tomu nadpis jako konstantu a celek pěkně zakóduje a uloží do X. Obvykle by to vypadalo tak, že by to X se dosazovaly konkatenované hodnoty hned několika dalších MEMO položek (operační zpráva, ...). Zde bychom jednoduše dopsali pár dolarových proměných - A JE TO!

Bullet Resolvování hodnot proměnných v argument listu Pro všechny příkazy platí, že jejich argumenty následující za jménem funkce se resolvují substitucí podle aktuálních hodnot proměnných kontextu skriptu, ale i podle hodnot globálního kontextu (systémové proměnné). Vedle určení, jaké vlastně hodnoty se mají používat je nutno vyřešit i zapeklitou otázku bacslashů. Jsou-li v proměnných jména souborů, není záhodno backslashe interpretovat. Jsou-li v proměnné ale naopak zakódovány všechny řádky nějakého MEMO fieldu, je potřeba při výpisu takové hodnoty do databáze nebo souboru zase provést dekódování sekvencí \n na CRLF ... Proto je možno ovládat pomocí prefixů vykřičníků způsob interpretace. Některé příkazy, kupříkladu viewer, už "tuší", že argumentem bude jméno souboru a snaží se jej uchopit v syrové podobě a ponechat backslashe. U většiny jiných příkazů je ale předem úplně nejasné, zda jsou backslashe skutečnými literály nebo výsledkem zakódování řídících znaků. Pravidla jsou následující:


Bullet Argument nezačíná vykřičníkem - dolarové proměnné se řeší z globálního kontextu. To se týká obvykle proměnných User,Today,... Jelikož je ale možno ze skriptů globální proměnné nastavovat, mohou to být i jakékoli jiné proměnné. Backslashe se nechávají na pokoji.
Bullet Argument začíná jedním vykřičníkem - dolarové proměnné se řeší z kontextu skriptu. Backslashe se dekódují jako kdyby byly výsledkem zakódování nových řádků, čili CRLF.
Bullet Argument začíná dvěma vykřičníky - dolarové proměnné se řeší z kontextu skriptu. Backslashe se nedekódují.
Bullet Argument začíná třemi vykřičníky - nic se nesubstituuje, žádné dolarové proměnné se neřeší a backslashe se nedekódují. CRLF.
Je jasné, že pravidla se uplatňují v opačném pořadí, než jsou popsána. Rovněž je jasné, že pro argumenty se vybere jenom jedno pravidlo na celý řádek. Proto se občas přetahují proměnné mezi lokálním a globálním kontextem, aby se dalo aplikovat jedno pravidlo a zároveň se vyřešily všechny nutné proměnné.

Bullet Resolvování - jediný průchod Argument list se prochází jenom jednou zleva doprava a hodnoty se substituují jenom jednorázově. Tedy nepoužívá se rekurze a není možno ji zde využívat.

BulletRejstřík kapitoly
BulletNadřízená kapitola dokumentace / rejstřík


JLABS Aktualizováno dne 20000704. Komentář: info@jlabs.cz