PostScript

Programozás PostScriptben

A programozás PostScriptben nagyon egyszerû. A legalapvetõbb módszer, hogy az operandusokat a mûveleti verem tetejére helyezed, majd meghívod a mûveletet, amely felhasználja õket. Tényleg ennyi az egész! Az igazi mûvészet mindig megtalálni a megfelelõ mûveletet. A rajzoló és szõveget író mûveletekkel, melyek a PostScript kód zömét teszik ki általában, késõbb foglalkozunk. Most néhány olyan mûveletet tekintünk át, amelyeket elsõsorban a program vázolására, felépítésére használhatunk.

Az elsõ ilyen mûvelet a def. A 'def' egy definíciót helyez a szótárverem tetején lévõ szótárba. A verem tetejérõl veszi az értéket, majd alóla a kulcsot (amelynek névnek kell lennie). Mondjuk az 'x' névhez szeretnénk rendelni az 5 értéket: PostScriptben ezt így tehetjük meg: /x 5 def. Vegyük észre a perjelet az 'x' elõtt: ez biztosítja hogy az 'x' név kerül a szótárba, nem pedig valami más, amilyen értékkel az x korábban rendelkezett a szótárverem szerint.

A 'def' új mûveletek megadására is használható, az érték ilyenkor egy eljárás. A következõ kód egy új, 'foo' mûveletet definiál, amely a mûveleti verem tetején lévõ két operandus összeadja, majd megszorozza a veremben következõ értékkel: /foo {add mul} def. Emlékezz rá, a visszatérési érték mindig a mûveleti verem tetjére kerülnek, hogy a továbbiakban felhasználhatóak legyenek.

Fontos tudni, hogy mûvelet megadásakor az eljárás kódjában nem történik kiértékelés, az majd csak akkor történik meg, ha az eljárás meghívásra kerül. Így az {1 2 add 3 mul} eljárás esetében az 'add' és 'mul' nevek kerülnek az eljárás törzsét tároló tömbbe. Ezzel ellentétben a szokásos tömbök esetében megtörténik a kiértékelés, pl. az [1 2 add 3 mul] tömb egyetlen egy objektumot tartalmaz: a 9 számot.

Az eljárás alkotóelemeinek késleltetett kiértékelésének két jelentõs következménye is van. Egyrészt, egy eljárásban használt mûvelet azt a hatást fejti ki, amivel az eljárás meghívásakor bír, és nem azt, amellyel az eljárás megadásakor fejtett volna ki. Másodszor, mivel a mûveletek törzsét mindig ki kell keresni a szótárverembõl, ez lassulást eredményezhet. Szerencsére a PostScript biztosít egy mûveletet, ami kapóra jön, egy eljárás belsejében szereplõ nevek kiértékelésére. Ez a mûvelet a bind, ami érzékelhetõen felgyorsíthatja a programot. Általában a következõképp használják:

/foo {add mul} bind def

Ez a foo eljárást definiálja két összetevõbõl, az 'add' és 'mul' mûveletek törzsébõl. Jegyezzük meg azt, hogy ha ezeket a mûveleteket a késõbbiekben átdefiniáljuk is, a bind mûveletnek köszönhetõen a foo eljárás ugyanúgy mûködik majd, mint korábban. A bind nélkül a foo viselkedése is megváltozna.