VOBSAH           DalÓÉ           PŇedeÓlej           info           mod                     prefsy

logo

×   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:  
Čá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ě:
 
KodeŇina   AMIGA E - Prakticky


VokeCáVKy HarDWare warez WorkBenchoviny DeMa Gfx&Muzika PaŇBY VokecÁvky II
Vokecávky Hardware Warez WBoviny Dema Gfx&Muz Pařby Vokecávky 2