AMIGA E - IV. díl
Tak, a máme ho tu zase... Co? Hmm, jo. $°% *{*&@#ť^%?? Plesk a už jsem zase
při sobě :-). Takže znova - máme tu další díl o programování v jazyce Amiga E.
Pokračujem dál v teorii. Drobnosti z praxe můžete najít v seriálku Amiga E -
- Prakticky. Toť vše. Jdem na to.
Speciální fskas pro:
Láhve / Horizontal
Dík za chválu mýho seriálu o éčku! SLIBUJU, že to nezabalim! Určitě tě potěší AMIGA E - Prakticky.
A speciálně pro tebe AmiE - Tutouš, kterej se mi snad v dohledný době podaří zprovoznit...
Dynamická alokace paměti (NEW)
Operátor NEW je velmi užitečný nástroj pro dynamickou alokaci paměti. Dymamicky
alokovaná paměť je taková, kterou si program vyhrazuje (alokuje) až po svém
spuštění, nebo během své práce.
NEW má několik rozdílných forem:
(mějme např. DEF p:PTR TO jakejsiobjekt, q:PTR TO INT)
NEW p
je výraz, který alokuje vynulovanou paměť o velikosti objektu, na který
p ukazuje. Výsledný ukazatel je zapsán do p, a je také hodnotou výrazu.
Selže-li NEW např. pro nedostatek paměti, provede se výjimka "MEM". Výjimky
jsou specialitou éčka a umožňují jednoduché zpracování výjmečných situací,
jako je třeba nedostatek paměti. O výjimkách si ale povíme až někdy později.
"NEW p" je zhruba ekvivalent:
IF (p:=New(SIZEOF jakejsiobjekt))=NIL THEN Raise("MEM")
s tím rozdílem, že p nikdy nezíská hodnotu, když dojde k vyvolání výjimky.
Proto je tato forma výraz a ne příkaz.
Ale je mnohem více možností: je možné dynamicky alokovat pole:
NEW p[10] /* pole 10-ti objektů */
NEW q[a+1] /* pole INTů, velikost se počítá zaběhu (podle a)*/
Uvolňování paměti alokované pomocí NEW se provádí automaticky při ukončení
programu, nebo pomocí END nebo FastDispose().
Používáte-li NEW [...]:obj, a počet využívaných položek je menší než je uvedeno
v objektu, jsou přidány položky 0/NIL/"\0" a podobně. Toto umožňuje rozšiřování
objektů bez vznikání problémů s alokacemi jako je tato. (Poznámka: Toto je
rozdílné od statických alokací [...]:obj.)
Pochopili? Já tedy ne! A to jsem to překládal z originální éčkovský dokumentace...
(O něco později: Jsem se zeptal BOLDY vo co de... Brnkačka! Je tím prostě míněna snaha
éčka mít všechny proměnný zarovnaný v paměti na adresy dělitelný 4. A ten blábol ob odstavec
nahoře jsem nechal v akci pro ty, kteří by si ze mě chtěli dělat srandu...)
Používáte-li NEW jako příkaz, může za ním následovat více ukazatelů:
NEW a,b.create(),c
je vpořádku.
Speciální formy NEW a END umožňují použití PTR bez objectů, takže můžete psát
věci jako:
NEW a.b.create()
NEW a.b[50]
END a.b
V těchto příkladech nebyl ukazatel "a" nijak měněn, zato ukazatel "b" v "a"
byl hojně používán.
Více příkazů na jedné řádce, závorkování (;)
Jak již víte, příkaz většinou stojí na samostatné řádce. Můžou se ale
také psát společně najednu řádku - pak se musí vzájemě oddělit středníkem,
nebo je možné napsat jeden příkaz na několik řádek - je nutno každou řádku
ukončit čárkou ",". Příklady:
a:=1; WriteF('hello!\n')
DEF a,b,c,d,
e,f,g
příkazy mohou být:
- přiřazení (:=)
- řídicí příkazy, FOR a podobné
- void výrazy
- návěští
- instrukce assembleru
Čárka je hlavní znak, kterým ukazujete, že si nepřejete ukončit příkaz
následujícím LF (koncem řádky). Od verze 3.x, každý token (nejmenší programová
jednotka), který se normálně nesmí objevit na konci řádku způsobí, že
příkaz bude pokračovat na další řádce. Také neodpovídá-li počet otvíracích
závorek "[" a "(" počtu uzavíracích závorek "]" nebo ")", bere se to jako
pokračování příkazu na další řádce.
- Příklady tokenů:
- + - * / =
- < >= <=
- := . <=> ::
- { [ (
- AND OR BUT THEN IS -> ostatní také, ale tyto jsou nejužitečnější
Příklad závorkování:
a:=[
[1,2],
[3,4]
] -> tady končí přiřazení.
Návěští a skoky (JUMP)
Návěští jsou globálně viditelné identifikátory s ":" přidanou nakonec. Např.:
návěštíčko:
Mohou být využívány instrukcemi jako je JUMP, a k odkazům na statická data.
Lze je použít ke skokům z jakéhokoliv typu smyčky (toto se ale nedoporučuje,
a je lepší použít příkazu EXIT), ale nikdy ne ven z procedury. Nejvíce se
návěští používají s assemblerem vloženým do programu.
Návěští jsou vždy globálně viditelné!
Používání JUMP:
JUMP <návěští>
Provádění programu pokračuje od <návěští>.
Příklad:
IF hotovo THEN JUMP konec
/* ostatní části programu */
konec:
Thats all folks! Č.
E.N.I.F.
Další ve frontě:
|
|
|
|
|
|
|
|
Vokecávky |
Hardware | Warez | WBoviny | Dema |
Gfx&Muz | Pařby | Vokecávky 2 |