AMIGA E - II. díl
Vítám Vás u druhého pokračování seriálku o programování v AMIGA E!
Dnes budu pokračovat v popisu jednotlivých rysu jazyka. Toto mi vydrží
jistě na hezkých pár dílu, takže mám na dlouho vystaráno s psaním...
K vlastnímu programování v éčku se dostaneme později - znáte to, nejdřív
trocha suchopárné teorie, pak teprv mnoho šťavnaté praxe...
Formát zápisu výrazu
Výraz je část kódu spojená dohromady operátory, funkcemi a závorkami,
vyjadřující určitou hodnotu.
Ve vitšině případů se skládá z:
- poímých hodnot (eísel, oetizcu, ...)
- operátoru (+, -, *, ...)
- volání funkcí (blabla())
- závorek ()
- prominých nebo prominných-výrazu (prom, i++, pole[10], ...)
Příklady výrazu:
1
'hello'
$ABCD+(2*6)+Abs(a)
(a<1) OR (b>=100)
Priority operátoru a spojování
Programovací jazyk E nemá žádné priority operátoru jako takové.
To znamená, že výrazy jsou vyhodnocovány zleva doprava. Změnit průběh
jejich provádění mužete uzávorkováním potřebných (pod-)výrazu.
Například:
1+2*3 /* =9 */ 1+(2*3) /* =7 */ 2*3+1 /* =7 */
Druhy výrazu
Existují tři druhy výrazu, které mohou být použity na ruzné účely.
- <prom>, obsahující právi pouze prominou
- <prom-výr>, obsahující prominou a poípadni i unární operátory spolu s ní.
Napoíklad "++" (inkrement) "." (výbir elena struktury) nebo [] (operátor
pole). Oznaeuje modifikovatelmé výrazy, jako jsou Lvalues v C.
Pozor - tyto (unární) operátory nejsou soueástí 3ádné priority.
- <výr>. Toto obsahuje <prom> a <prom-výr>, a dal1í výrazy (<výr>).
Poíklady:
<prom>: | alfa, x, bla |
<prom-výr>: | pole[x], c++, window.width, -c |
<výr>: | alfa + (x * pole[x]) - c++ |
Volání funkcí
Volání funkce je přechodné přerušení právě probíhajícího kódu pro skok
do funkce, což muže být buť vlastnoručně napsaná funkce (PROC) nebo funkce
poskystovaná systémem. Volání funkcí se zapisuje jako název funkce
následovaný dvěma závorkami (), které uzavírají nula až nekonečně mnoho
argumentů oddělených vzájemně čárkami ",". Je dobré vědět, že argumenty
funkce jsou opět výrazy.
Příklady:
foo(1,2)
Gadget(buffer,glist,2,0,40,80+offset,100,'Cancel')
Close(handle)
Operátory:
Matematické (+ - * /)
Tyto infixní operátory spojují výrazy s dalšími hodnotami (nebo výrazy)
pro vyjádření nové hodnoty.
Příklady:
1+2, MAX-1*5
"-" muže být i použit jako první část výrazu.
Napo. -a nebo -b+1 je správni.
Pozor: * a / představují 16-ti bitové operátory. Pro 32 bitové výpočty
použijte Mul() nebo Div().
Porovnávání (= <> > < >= <=)
Porovnávací operátory mají stejný význam jako v matematice, s tím
rozdílem, že jejich výsledkem je buď TRUE (32-bitová hodnota -1), nebo FALSE.
Těchto operátoru lze použít i při výpočtech s reálnými čísly.
Logické a binární (AND OR)
Tyto operátory kombinují buď logické hodnoty (TRUE, FALSE), nebo pracují
jako bitové operace AND a OR.
Příklady:
(a>1) AND ((b=2) OR (c>=3)) | /* logická operace */ |
a:=b AND $FF | /* bitová operace */ |
Unární operátory (SIZEOF ^ {} ++ -- `)
- SIZEOF <jméno objektu>
Vrací velikost určeného objektu nebo typu CHAR/INT/LONG.
Příklad: SIZEOF newscreen + SIZEOF INT
- {<proměnná>}
Vrací adresu prominné nebo návěstí. Toto je operátor, který mužete použít
pro předání proměnné jako argumentu do funkce odkazem, místo hodnotou,
což je základní zpusob předávání argumentu v E. Viz "^".
Příklad: Val(input,{x})
- ^<proměnná>
Opak pro {}, zapisuje nebo čte proměnné, které byly předány odkazem.
Příklady: ^a:=1 b:=^a
Mužete jej také použít pro přímý zápis (čtení) honot (LONGu) do paměti
(viz Basicovské "peek" a "poke"), je-li <proměnná> ukazatel na takovou
hodnotu.
Příklad pro použití {} a ^:
PROC set(var,exp)
^var:=exp
ENDPROC
set({a},1) /* Volání funkce set(). Stejné jako: a:=1 */
- <prom-výr>++ a <prom-výr>--
Zvětší (++) nebo zmenší (--) ukazatel udaný jako <prom-výr> o velikost
položky, na kterou ukazuje. To znamená, že ukazatel po provedení této
operace ukazuje na následující nebo předchozí položku. Při použití na
proměnnou, která není ukazatelem, změní se tato proměnná o 1.
Pozor: ++ mění hodnotu vždy až po vyhodnocení <prom-výr>, -- vždy před
<prom-výr>!
Příklady:
a++ /* vrátí hodnotu a, a pak zvit1í a o 1 */
sp[]-- /* sníží ukazatel sp o 4 (je-li to pole LONGu),
a přečte hodnotu, na kterou ukazuje sp */
- `<výraz>
Toto se nazývá "quoted expression" a je převzato z LISPu. <výraz> se
nevyhodnotí, ale místo toho bude vrácena adresa, na které leží výraz,
ještě může být vyhodnocen někdy později. Více se o tomto rysu jazyka E
dozvíte v originální (anglické) dokumentaci.
Trojitý operátor (IF THEN ELSE)
Operátor IF má téměř stejnou funkci jako příkaz IF. Provádí pouze
výběr mezi dvěma výrazy namísto mezi dvěma příkazy nebo bloky příkazu.
Je shodný s céčkovským operátorem ? (x?y:z).
IF <logická prom.> THEN <výr. 1> ELSE <výr. 2>
Vrací výr. 1 nebo výr. 2, v závislosti na logické proměnné.
Například místo:
IF a<1 THEN b:=2 ELSE b:=3
IF x=3 THEN WriteF('x je 3\n') ELSE WriteF('x je něco jiného\n')
můžete napsat:
b:=IF a<1 THEN 2 ELSE 3
WriteF(IF x=3 THEN 'x je 3\n' ELSE 'x je něco jiného\n')
Pro dnešek vše,
ale
příště...
E.N.I.F.
Další ve frontě:
|
,
|
|
|
|
|
|
|
|
|
Hardware | Warez | WBoviny | Kodeřina | Dema |
Gfx&Muz | Pařby | Vokecávky2 |