**HyperTalk** on HyperCard-sovelluskehittimen oma ohjelmointikieli.

Kielen rakenne
--------------

HyperTalkin toiminta perustuu objektien ja käyttäjän välillä lähetettäviin *viesteihin* (*message*) ja erilaisiin objekteihin, joita ovat painikkeet (*button, btn*), tekstikentät (*field, fld*), kortit (*card, cd*), pohjat (*background, bg*) ja pinot (*stack*). On myös muutamia objekteja, joilla ei ole omaa ohjelmakoodia, eivätkä ne voi lähettää tai vastaanottaa viestejä, mutta joita muut objektit voivat hallita; näitä ovat ainakin *the message box* (viestilaatikko) ja *menubar*. Viestit voivat olla automaattisesti lähetettävia (esim. *idle*, jota kutsutaan jatkuvasti objektin ollessa aktiivinen) tai käyttäjän toiminnasta aiheutuva (esim. *mouseUp*, joka lähetetään objektille sitä klikattaessa). Viestejä voidaan lähettää myös ohjelmasta käsin. Viestit määritetään niiden vastaanottajalle määrätään seuraavasti:

```
on *viesti*
 *käskyjä*
end *viesti*
on *viesti2*
 *käskyjä*
end *viesti2*
```

*on* aloittaa viestinkäsittelijän, ja *end* lopettaa sen. Näiden käskyjen välissä on viestin aikana suoritettava ohjelmakoodi. Viestejä voi olla useita, ja ne kirjoitetaan peräkkäin esimerkin mukaisesti.

Objekteille on myös ominaisuuksia, kuten *visible* (näkyvyys), ja *number* (järjestysnumero). Ominaisuudet vaihtelevat objekteittain. Suurinta osaa ominaisuuksista voidaan muuttaa ohjelmasta käsin.

HyperTalk on hyvin lähellä englannin kieltä. Se sisältää mm. prepositioita (esim. *into*, *to*, *from*, *of*), joiden käyttö on kuitenkin loppuen lopuksi hyvin loogista:

```
put "Hello" into the message box
```

*put*-käsky kertoo jonkin arvon (*value*) sijoittamista johonkin, "Hello" on arvo, *into* ilmaisee, että seuraavaksi kerrotaan kohde, ja kohde on *the message box*. Toinen esimerkki:

```
if the value of card field "tekstiä" is "Moi!" then
 beep
end if
```

*if* aloittaa ehtorakenteen, *the value* viittaa arvoon, *of* ilmaisee arvon sisältäjää, joka on *card field "tekstiä"*, eli nykyisessä kortissa sijaitseva kenttä, jonka nimi on *"tekstiä"*. *is* vastaa useimpien ohjelmointikielien ==-operaattoria (on yhtä suuri kuin). *beep* antaa äänimerkin ja *end if* lopettaa ehtorakenteen.

Objektien hallinta
------------------

### Painikkeet

Painikkeet (*button, btn*) ovat objekteja, joita käytetään nimensä mukaisesti yleensä painonappeina. Niitä voidaan käyttää myös painamisen estämiseen (läpinäkyvä painike toisen painikkeen päällä), ohjattavina koristeina ohjelmassa, ja moniin muihinkin tarkoituksiin. Kaikkeen tähän löytyy yleensä parempikin tapa.

Painikkeille voidaan määrätä useita vastaanotettavia viestejä, joista yleisin on *mouseUp*. Sitä käytetään, kun hiiren painike *vapautetaan* painikkeen päältä. Suurin osa painikkeille lähetettävistä käskyistä onkin juuri hiiren käsittelyyn liittyviä: *mouseUp, mouseDown, mouseEnter, mouseLeave* jne

Painikkeille on useita ominaisuuksia, kuten *Automaattinen korostus* (korostus painettaessa), sekä niiden ulkonäkö.

### Kentät

Kentät (*field, fld*) ovat neliönmuotoisia objekteja, jotka voivat sisältää tekstiä. Niille voidaan määrätä samat vastaanotettavat viestit, kuin painikkeille, ja muutamia muitakin.

Kenttien ominaisuuksia ovat mm. *Lukittu* (voidaanko tekstiä muuttaa käsin), sekä niiden ulkonäkö.

### Kortit

Korttien välillä voidaan liikkua, niitä voidaan luoda ja poistaa, ja niillä on muutamia ominaisuuksia. Niiden omia viestejä ovat mm. *openCard* (kortti avataan) ja *idle* (suoritetaan jatkuvasti).

### Pinot ja pohjat

Pinoille ja pohjille määrätään pääasiassa avaus, ja sulkemisviestejä, ja niillä on muutamia ominaisuuksia.

### Message box

Message box (tai *the message box*, suom. viestilaatikko) on erillinen, ohjattavissa oleva ikkuna, jolla käyttäjä voi suoraan lähettää HyperTalk-käskyjä. Se voidaan piilottaa käskyllä *hide message box* ja näyttää käskyllä *show message box*.

### Menubar

Menubar viittaa valikkoriviin, joka sijaitsee näytön yläreunassa. Se voidaan piilottaa komennolla *hide menubar* ja näyttää komennolla *show menubar*.

Ongelmat HyperTalk-kielessä
---------------------------

Suurin ongelma kielen kanssa on luultavasti sen kielioppi. Esimerkiksi *the* -sanan merkitys ja käyttötarkoitus on hyvin sekava. Myös prepositioiden kanssa tulee helposti epäselvyyksiä. Tämän takia kieleen on kehitetty lyhenteitä, ja osa prepositioista on mahdollista jättää pois. Esimerkki:

```
go to card "kortti"
```

saa aikaan samaan tuloksen kuin lyhenne

```
go cd "kortti"
```

eli siirtymisen korttiin nimeltä "kortti".

Lähteet
-------

* HyperCard Perusteet, Apple
* HyperCard Käsikirja, Apple
* HyperTalk Ohjelmoinnin perusteet, Apple