VyÜlo v t²denφku: COMPUTERWORLD
╚φslo:10/95
RoΦnφk:1995
Rubrika/kategorie: Co (ne)najdete ve slovnφku

zp∞t do archivu Φlßnk∙ | rejst°φk | p°edchozφ Φlßnek | nßsledujφcφ Φlßnek

Ji°φ Peterka

Macro

Programovßnφ m∙₧e b²t i fyzicky nßroΦnou zßle₧itostφ - pova₧ujeme-li za fyzicky nßroΦnΘ intenzivnφ buÜenφ do klßvesnice. N∞kdy se toti₧ m∙₧e stßt, ₧e naprogramovßnφ n∞Φeho konkrΘtnφho dß opravdu hodn∞ prßce, resp. vy₧ßdß si äna¥ukßnφ" opravdu velkΘho kusu zdrojovΘho textu. P°itom samoz°ejm∞ velmi zßle₧φ na schopnostech a stylu konkrΘtnφho programßtora, ale nezanedbateln² vliv zde mß i v²razovß schopnost pou₧itΘho programovacφho jazyka. Nenφ jist∞ t∞₧kΘ nahlΘdnout, ₧e Φφm vyÜÜφ je ·rove≥ programovacφho jazyka, tφm v∞tÜφ je semantick² obsah jednotliv²ch syntaktick²ch element∙ tohoto jazyka. Neboli, °eΦeno srozumiteln∞jÜφ mluvou: tφm vφce znamenß to, co v danΘm jazyce napφÜi. Zdaleka änejukecan∞jÜφmi" jsou proto programy v jazyku symbolick²ch adres, neboli v asembleru. Zde se mnohdy Φlov∞k d°φve upφÜe, ne₧ n∞co skuteΦn∞ smysluplnΘho naprogramuje.

Nenφ proto divu, ₧e lidΘ se brzy zaΦali ohlφ₧et po takov²ch mechanismech, kterΘ by jim usnadnily psanφ rozsßhlejÜφch zdrojov²ch text∙, a tuto mnohdy dosti monot≤nnφ Φinnost co mo₧nß nejvφce zefektivnily. Vcelku logicky se pak takovΘto mechanismy vyvinuly a doÜly nejv∞tÜφho uplatn∞nφ u t∞ch änejukecan∞jÜφch" programovacφch jazyk∙, tedy u nejr∙zn∞jÜφch asembler∙. SpoleΦn²m charakteristick²m rysem vÜech t∞chto mechanism∙ je skuteΦnost, ₧e fungujφ na textovΘ ·rovni - m∙₧eme si je p°edstavit jako automatickΘ dosazovßnφ cel²ch kus∙ textu na urΦenß mφsta. A to jeÜt∞ d°φve, ne₧ p°ekladaΦ (asembler) zaΦne doopravdy p°eklßdat zdrojov² text.

V souvislosti s t∞mito mechanismy se pou₧φvß v²sti₧n² termφn makro (angl.: macro). Jako tzv. t∞lo makra se oznaΦuje vzor textu, kter² mß b²t na urΦitΘ mφsto zdrojovΘho programu dosazen. Takov²chto vzor∙ ale m∙₧e b²t vφce (samoz°ejm∞ r∙zn²ch), a tak ka₧d² z nich musφ mφt vhodnΘ oznaΦenφ - tzv. jmΘno makra. VÜe pak funguje nßsledujφcφm zp∙sobem: pokud nechceme n∞jak² text vypisovat vφcekrßt, napφÜeme jej jen jednou, jako vzor, a opat°φme jej vhodn²m jmΘnem. Tφm tzv. definujeme makroinstrukci (tΘ₧: makrop°φkaz, zkrßcen∞ jen makro). Kdy₧ pak n∞kde pot°ebujeme napsat stejn² text, nemusφme jej skuteΦn∞ vypisovat - staΦφ mφsto n∞j uvΘst jmΘno, kterΘ jsme p°i°adili p°φsluÜnΘmu makru (makroinstrukci, makrop°φkazu). Toto se v∞tÜinou oznaΦuje jako volßnφ makra (macro call), i kdy₧ to nenφ p°φliÜ v²sti₧nΘ: volßnφ by toti₧ naznaΦovalo odskok na jinΘ mφsto v programu, zatφmco zde k ₧ßdnΘmu odskoku nedochßzφ. Zde se naopak vezme p°φsluÜn² text, a dosadφ se na mφsto, kde bylo makro volßno. Pokud je makro tφmto zp∙sobem volßno nap°φklad na deseti mφstech, je efekt stejn², jako kdyby byl p°φsluÜn² text desetkrßt rozepsßn na zmφn∞n²ch deseti mφstech (a existoval v deseti exemplß°φch). Mφsto ärozepsßnφ" se vÜak hovo°φ o tzv. rozvoji makra (macro expansion). Naproti tomu p°i skuteΦnΘm volßnφ by p°φsluÜn² podprogram existoval jen jednou.

Jak jsme si ji₧ naznaΦili, mo₧nost pou₧φvat makra vznikla nejprve u r∙zn²ch p°ekladaΦ∙ jazyka symbolick²ch adres, neboli asembler∙. P°φsluÜnΘ p°ekladaΦe se pak ale ji₧ oznaΦovaly jako makroasemblery , co₧ m∞lo zd∙raznit prßv∞ jejich schopnost prßce s makoinstrukcemi (makry). Pro sprßvnΘ pochopenφ jejich podstaty je vhodnΘ si p°edstavit, ₧e jde o b∞₧n² p°ekladaΦ-asembler, p°ed kter² se p°ed°adφ jeÜt∞ jeden pomocn² p°ekladaΦ, fungujφcφ jako textov² preprocesor. Jeho ·kolem je provedenφ vÜech rozvoj∙ maker, neboli dosazenφ text∙, tvo°φcφch t∞la maker, na mφsta jejich volßnφ. V praxi p°itom nejde o skuteΦn∞ samostatn² p°ed°azen² p°ekladaΦ, ale pouze o samostatn² pr∙chod p°ekladaΦe zdrojov²m textem, p°i kterΘm dochßzφ v²hradn∞ k rozvoji maker, zatφmco k vlastnφmu p°ekladu dochßzφ a₧ p°i dalÜφm pr∙chodu (Φi pr∙chodech).

Jednotlivß makra p°itom nemusφ zdaleka p°edstavovat jen änem∞nnΘ" kusy texty. Ve v∞tÜin∞ konkrΘtnφch p°φpad∙ mohou mφt makra i r∙znΘ parametry, mohou se v∞tvit v zßvislosti na r∙zn²ch podmφnkßch, jejich rozvoje se mohou p°edΦasn∞ ukonΦovat, makra se mohou do sebe vno°ovat apod. V₧dy samoz°ejm∞ zßle₧φ na konkrΘtnφm makrojazyku, kter² urΦuje p°esnß pravidla pro definice, volßnφ a rozvoje maker. Zd∙razn∞me si ale jednu velmi podstatnou skuteΦnost, kterß je klφΦovß pro sprßvnΘ pochopenφ celΘ podstaty maker a jejich odliÜenφ od mechanismu podprogram∙ - makra jsou v²hradn∞ zßle₧itostφ zdrojovΘho textu, a s jeho p°ekladem zanikajφ. Naproti tomu podprogramy p°eklad äp°e₧ijφ", a existujφ i v p°elo₧en²ch a spustiteln²ch programech.

Makra, makrojazyky a mo₧nost pou₧φvßnφ makroinstrukcφ vÜak nejsou v²hradnφ zßle₧itostφ programovßnφ na ·rovni asembleru - analogickΘ mechanismy dnes majφ zabudovßny i p°ekladaΦe mnoh²ch vyÜÜφch programovacφch jazyk∙. Jejich cφlem je p°itom totΘ₧, co bylo cφlem na ·rovni asembleru: zefektivnit prßci programßtora, kter² pφÜe zdrojov² text.

Programovßnφ na nejr∙zn∞jÜφch ·rovnφch vÜak nenφ zdaleka jedinou Φinnostφ, p°i kterΘ lidΘ musφ vykonßvat neustßle se opakujφcφ Φinnosti - kterΘ je zcela zßkonit∞ p°estßvajφ bavit, jakmile je majφ d∞lat vφcekrßt. A jakmile Φlov∞ka n∞co nebavφ, p°φsluÜnou Φinnost d∞lß pomalu, s chybami, nep°esn∞ atd. Nenφ proto divu, ₧e i tv∙rci nejr∙zn∞jÜφch aplikacφ zabudovali do sv²ch v²tvor∙ obdobu ämaker". Setkßme se s nimi nap°φklad v textov²ch editorech, ve spreadsheetech a v mnoha dalÜφch aplikacφch. N∞kdy jde jen o skromnΘ prost°edky, umo₧≥ujφcφ p°edem änahrßt" sekvenci p°φkaz∙ a pak je nßsledn∞ p°ehrßt. Jindy jde a₧ o celΘ propracovanΘ makrojazyky, kterΘ umo₧≥ujφ vybudovat nad dan²m produktem ·pln∞ novou aplikaci, Üitou na mφru konkrΘtnφm specifick²m pot°ebßm.


zp∞t do archivu Φlßnk∙ | rejst°φk | p°edchozφ Φlßnek | nßsledujφcφ Φlßnek
Tento Φlßnek m∙₧e b²t voln∞ Üφ°en, pokud se tak d∞je pro studijnφ ·Φely, na nev²d∞leΦnΘm zßklad∞ a se zachovßnφm tohoto dov∞tku. Podrobnosti hledejte zde, resp. na adrese http://archiv.czech.net/copyleft.htm