Pagina iniziale | Navigazione |
Google

HyperTalk

HyperTalk è un linguaggio di programmazione creato nel 1987 da Dan Winkler e usato nel software hypermediale HyperCard di Bill Atkinson.
Il linguaggio si rivolgeva soprattutto a principianti: i programmatori HyperTalk venivano chiamati "autori" ed il processo dello scrivere programmi scripting. Gli script HyperTalk sono molto simili alla lingua inglese e usano una struttura simile al Pascal.

Il linguaggio, non sensibile alle maiuscole, agli inizi era interpretato, ma diventò "virtualmente compilato": ogni script viene compilato al primo lancio, dopo di che il codice resta a disposizione.
Sono previste le strutture di base per il controllo del flusso: repeat for/while/until, if..then..else; è inoltre possibile definire funzioni e subroutine, qui chiamate handler, con passaggio di parametri. I tipi di dati vengono gestiti direttamente dal linguaggio: ogni dato viene sempre convertito in stringa prima della memorizzazione: al momento dell'uso, HyperTalk trasforma il dato nel tipo richiesto dal contesto; il tutto avviene in background al runtime. Non ci sono classi o strutture nel senso tradizionale; il loro posto è preso da stringhe speciali o liste di item, separate da un carattere (definibile, nelle ultime versioni). Queste liste prendono anche il posto dei vettori, non supportati direttamente.

Table of contents
1 Orientamento agli oggetti
2 Estensioni di HyperTalk
3 Discendenti di HyperTalk
4 Alcuni esempi di HyperTalk

Orientamento agli oggetti

Ogni script è associato ad un oggetto di HyperCard e salvato assieme all'oggetto nei file (chiamati stack); HyperTalk permette di manipolare tali oggetti e cambiare le loro proprietà (comando set). Ogni oggetto viene identificato usando un linguaggio molto simile a quello naturale e indicando la gerarchia in cui si trova:

 get the name of card button 5
 put "questa è una prova" into card field "mioCampo"
 send "mouseUp" to card button "OK" of this card

Tali oggetti (indicati col nome, con il numero d'ordine o con un ID unico) possono appartenere ad una singola scheda o al background, dal quale possono essere visibili su ogni scheda, pur mantenendo valori diversi.

HyperTalk prevede anche il pieno controllo degli strumenti grafici tramite la scelta dell'attrezzo da usare e simulando il movimento del mouse mediante il comando drag:

 put "10,10" into start
 put "100,100" into end
 drag from start to end

HyperCard usa i messaggi (cioé gli eventi) per gestire le varie interazioni; per esempio, il messaggio mouseDown è spedito quando l'utente preme il pulsante del mouse mouseUp quando lo rilascia; il bersaglio dell'evento è l'oggetto in cui è avvenuto l'evento, che eventualmente può passarlo più in alto nella gerarchia, dopo averlo o meno processato. Durante i momenti di inattività viene generato il messaggio idle e durante il movimento del mouse vengono spediti ai vari oggetti messaggi mouseEnter e mouseLeave. Anche la pressione di un tasto genera un evento keyDown che contiene il codice del tasto. L'autore di uno stack non deve preoccuparsi di generare un event loop, in quanto questo avviene già all'interno di HyperTalk.

Estensioni di HyperTalk

Il linguaggio, sufficientemente completo per un uso normale, poteva essere espanso tramite un protocollo tipo plug-in: si tratta dei comandi esterni (XCMD) e delle funzioni esterne (XFCN). Si trattava in pratica di codice nativo allegato agli stack (inserito nelle risorse, tipo di file specifico del Mac OS) con un punto di ingresso ed un valore di ritorno. Queste estensioni sono richiamate dall'interno degli script come una qualunque funzione (handler) e possono generare messaggi. Alcuni XCMD avanzati aggiunsero caratteristiche avanzate, come il pieno supporto del colore (ColorizeHC, HyperTint, AddColor), finestre speciali (ShowDialog, MegaWindows, Listoid, Textoid, Tabloid, Prompt), supporto del drag & drop o molte interfacce hardware (Midi, seriali, ecc...)

Discendenti di HyperTalk

Molti linguaggi sono nati sulla scia di HyperTalk. Ad esempio:

Altri esempi di script, che possiamo considerare cloni di secondo livello:

  • Lingo - il linguaggio di Macromedia Director
  • Applescript - il linguaggio di script inserito nel Mac OS
  • SerfTalk - un clone di HyperTalk che supportava molte caratteristiche moderne, scomparso però durante il beta test

Alcuni dei termini usati in HyperCard sono diventati popolari in altri linguaggi (per esempio, i messaggi "onmouseup" di Javascript).

Questi cloni e dialetti (normalmente chiamati linguaggi xTalk) hanno aggiunto molte caratteristiche indispensabili per un linguaggio moderno, come la gestione delle eccezioni, proprietà definite dal programmatore, timer, multi-threading ed anche nuovi oggetti.

Alcuni esempi di HyperTalk

-- script p.es. di un pulsante di background che allinea
-- tutti i pulsanti di una scheda ciascuno a 15 pixel dall'altro
-- notare che non c'è bisogno di definire le variabili

on mouseUp put "100,100" into posizione repeat with x = 1 to the number of card buttons set the location of card button x to posizione add 15 to item 1 of posizione end repeat end mouseUp

-- questo script può stare in un pulsante (scheda o background) -- trasferisce il contenuto di un file (fino al carattere -- nel campo di nome "mioCampo" -- i ":" è il simbolo standard nella gerarchia del Mac OS -- lo script viene eseguito non appena si preme il tasto del mouse -- (è usato )

on mouseDown put "myDisk:myFolder:myFile" into filePath if there is a file filePath open file filePath read from file filePath until return put it into card field "mioCampo" close file filePath set the textStyle of character 1 to 10 of card field "mioCampo" to bold end if end mouseDown

-- la seguente è una funzione che ricerca tutte le occorenze del pattern -- nella stringa inStr e al suo posto vi sostituisce la stringa newStr -- La funzione accetta le 2 stringhe ed il pattern e restituisce la -- stringa di partenza modificata

function replaceStr pattern, newStr, inStr repeat while pattern is in inStr put offset(pattern,inStr) into p put newStr into character p to (p + the length of pattern) -1 of inStr end repeat return inStr end replaceStr


GNU Fdl - it.Wikipedia.org




Google | 

Enciclopedia |  La Divina Commedia di Dante |  Mappa | : A |  B |  C |  D |  E |  F |  G |  H |  I |  J |  K |  L |  M |  N |  O |  P |  Q |  R |  S |  T |  U |  V |  W |  X |  Y |  Z |