HyperTalk - HyperTalk - Wikipedia
![]() | Tento článek má několik problémů. Prosím pomozte vylepši to nebo diskutovat o těchto problémech na internetu diskusní stránka. (Zjistěte, jak a kdy tyto zprávy ze šablony odebrat) (Zjistěte, jak a kdy odstranit tuto zprávu šablony)
|
Paradigma | procesní |
---|---|
Navrhl | Dan Winkler |
Vývojář | Apple Computer Inc. |
Poprvé se objevil | 1987 |
Ovlivněno | |
Přirozený jazyk, Pascal | |
Ovlivněno | |
ActionScript, AppleScript, ECMAScript, JavaScript, Žargon, LiveCode, SenseTalk, SuperTalk |
HyperTalk byl na vysoké úrovni, procesní programovací jazyk vytvořil v roce 1987 Dan Winkler a používá se ve spojení s Počítač Apple je HyperCard hypermediální program od Bill Atkinson. Protože hlavní cílovou skupinou HyperTalk byli začínající programátoři, programátoři HyperTalk se obvykle nazývali „autoři“ a proces psaní programů byl znám jako „skriptování ". Skripty HyperTalk připomínaly psané Angličtina a použil logickou strukturu podobnou struktuře Programovací jazyk Pascal.
HyperTalk podporoval základní řídicí struktury systému procedurální jazyky: opakujte pro / while / until, if / then / else, stejně jako volání „obsluhy“ funkcí a zpráv (obslužná rutina funkce byla podprogram a obslužná rutina zprávy procedura). Typy dat programátor jej obvykle nemusel specifikovat; ke konverzi došlo transparentně na pozadí mezi struny a čísla. Nebyly žádné třídy nebo datové struktury v tradičním smyslu; na jejich místě byly zvláštní řetězcové literály, nebo „seznamy“ „položek“ oddělených čárkami (v novějších verzích vlastnost „itemDelimiter“ umožňovala výběr libovolného znaku).
Na konci 80. let Apple uvažoval[1] použitím HyperCard HyperTalk skriptovací jazyk jako standardní jazyk napříč společností a v rámci ní klasický Mac OS operační systém i pro meziprocesová komunikace mezi produkty Apple a jinými produkty. Společnost se nebránila vývoji napodobenin typu SuperCard, ale vytvořil Výbor pro standardy HyperTalk, aby se zabránilo nekompatibilitě mezi jazykovými variantami.[1] The malá a velká písmena jazyk byl zpočátku interpretován, ale získal just-in-time kompilace s kartou HyperCard 2.0.[2]
Popis
Základní operace
U většiny základních operací, včetně matematických výpočtů, HyperTalk upřednostňoval přirozené jazykové řazení predikátů před uspořádáním použitým v matematické notaci. Například v HyperTalku dát
Přiřazovací příkaz, proměnná byla umístěna na konec výpisu:
dát 5 * 4 do výsledek
zatímco v tradičnějším ZÁKLADNÍ programovacího jazyka (a většiny dalších), stejného by bylo dosaženo psaním:
výsledek=5*4
Kód HyperTalk má vedlejší účinek při vytváření proměnná výsledek za běhu. Skripty by mohly proměnné přiřadit libovolný typ nebo hodnotu pomocí dát
příkaz, čímž HyperTalk velmi slabě napsaný. Převody mezi typy proměnných byly neviditelné a automatické: řetězec „3“ lze vynásobit číslem 5, čímž se získá číslo 15, nebo číslo 5 zřetězené na řetězec „3“, aby se vytvořil řetězec „35“. HyperTalk by si nestěžoval, pokud by typy nemohly být automaticky převedeny.
Řízení toku a logika byly obecně podobné jako v jiných běžných jazycích pomocí a pokud ... pak ... jinak ... skončit pokud
struktura pro podmíněné a podpůrné smyčky založené na flexibilitě opakovat ... ukončit opakování
syntax. Komentáře byly označeny dvěma znaménky mínus: - toto je komentář
.
Objekty, kontejnery a skripty
HyperCard je primární uživatelské rozhraní koncept byl Kartu, zobrazovací systém, který emuloval kartotéka. Karty se běžně používaly k ukládání informací, podobně jako záznam v konvenčním formátu databáze plochých souborů. Grafické rozložení karty bylo vytvořeno pomocí myši umístěním různých prvků na kartu, například textových polí a tlačítek. Hlavní karta s rozložením známá jako Pozadí byl zobrazen za průhlednými oblastmi každé karty. Objekty umístěné na pozadí, jako jsou pole a tlačítka, by byly sdíleny jako společné rozložení mezi několika kartami, ale s obsahem specifickým pro kartu. Sbírka karet, pozadí a související data v nich uložená byla uložena v jediném souboru známém jako zásobník (karet). Souhrnně jsou všechny tyto objekty obsahující data označovány jako kontejnery.
Funkce HyperTalk nebo skripty, byly normálně uloženy uvnitř skript
vlastnost k dispozici v mnoha kontejnerech zásobníku. Skripty mohly přistupovat k vlastnostem kontejneru, odpovídajícím proměnné instance, za použití dostat
a soubor
instrukce. Vlastnost script obsahovala prostý text a neměla žádné speciální vlastnosti; skripty lze umisťovat a spouštět z libovolného textového kontejneru, včetně řetězcových proměnných,[A] nebo importovány z jiných zásobníků pomocí začít používat
příkaz. Skript může být dokonce uživatelem zadaný text zadaný do textového pole na obrazovce. Libovolný text lze spustit pomocí dělat
příkaz, podobným způsobem jako Dynamic SQL.[3]
S odkazem na kontejnery
Klíčovým konceptem v HyperTalk byl způsob, jakým odkazoval na kontejnery prostřednictvím navigačního systému založeného na vizuální hierarchii zásobníku. Každý kontejner v zásobníku dostal při vytváření jedinečné ID číslo a mohl také dostat volitelný název. Skripty by mohly odkazovat na objekty pomocí některého z těchto identifikátorů spolu s objektem typ specifikováno pomocí z
operátor. Tento operátor použil syntaxi přirozeného jazyka pro snadnou čitelnost, samodokumentující kód. Například skript uložený v tlačítku na kartě může chtít převzít uživatelem zadaný text shromážděný pomocí textového pole a uložit text do proměnné s názvem hodnota:
dát the hodnota z Kartu pole "zadejte" do hodnota
Tlumočník mohl odvodit různé kontextové aspekty výroků. Ve výše uvedeném prohlášení například proto, že skript bude spuštěn v kontextu tlačítka na konkrétní kartě, identifikátoru Kartu Rozumí se tím, že označuje kartu, se kterou uživatel komunikoval, i když samotné tlačítko by normálně bylo na pozadí. Kromě toho „hodnota„(text odeslaný uživatelem) byl považován za hlavní vlastnost a za cíl operací, pokud není uvedeno jinak. Podobně,“pole karty"Předpokládalo se, že je cílem příkazu, na rozdíl od pole na pozadí, takže informace lze také vynechat. Dokonce i typy kontejnerů měly krátké formuláře, které mohli programátoři použít k uložení psaní. Výše uvedený kód je tedy ekvivalentní kratší formě :
dát fld "zadejte" do hodnota
Objekty v daném kontextu - například karta nebo pozadí - dostaly také runtime číslo na základě jejich z-pořadí na obrazovce. Aby HyperTalk pomohl při používání jejich polohy pro navigaci, zahrnoval také řadu pořadové číslo a kardinál odkazování na systémy pro další zjednodušení syntaxe. Za předpokladu, že pole „zadejte zde“ je jediné pole na kartě, lze také napsat výše uvedený kód:
dát the za prvé Kartu pole do hodnota
nebo:
dát Kartu pole 1 do hodnota
Volba stylu adresování byla ponechána na programátorovi; často byly v různých příkazech použity různé styly, aby byl kód čitelnější.
HyperTalk zahrnoval mě
kontejner, který fungoval stejným způsobem jako já
kvalifikátor nalezen ve většině objektově orientované jazyky, což umožňuje jednoduchý přístup k aktuálnímu objektu kontejneru. Méně časté bylo to
proměnná, která u některých integrovaných operátorů obsahovala hodnotu poslední operace. Například:
zeptat se „Jaká je hodnota?“ dát to do Kartu pole "Zobrazit"
používá zeptat se
příkaz k zobrazení a dialogové okno a zachytit text zadaný do doprovodného textového pole; když je dialog dokončen stiskem Vrátit se nebo kliknutím OK, je hodnota přiřazena to
pseudoměnná. Tento kód poté zkopíruje tuto hodnotu do pole karty pomocí dát
operátor přiřazení.
Sbírky
Kontejnery daného typu byly také k dispozici jako kolekce s pluralizovanou verzí tohoto typu kontejneru jako jeho název - kolekce polí na kartě byla pole karet
. Tyto sbírky byly samy o sobě kontejnery s vlastními vlastnostmi. Klíčovým mezi nimi byl číslo
vlastnost, která byla široce používána během iterací a podobných úkolů. Například pokud byste chtěli skrýt všechna pole na kartě, mohlo by to být dosaženo pomocí tohoto kódu:
opakovat s i = 1 na the číslo z Kartu pole skrýt pole i konec opakovat
Tento kód odhaluje další společnou vlastnost HyperTalk: že vlastnost může mít několik jmen a operátorů. V tomto případě skrýt
velení a přidružené ukázat
, jedná se o nastavení hodnoty kontejneru viditelné
vlastnictví. Tím pádem skrýt pole i
je přesně ekvivalentní nastavte viditelnost pole i na hodnotu false
. Podobným příkladem byl uzamčení obrazovky
příkaz, který zastavil vizuální aktualizaci, což byla krátká forma nastavit zámek obrazovky na hodnotu true
, kde uzamčení obrazovky
je vlastnost samotné HyperCard - také kontejner. Mnoho příkladů tohoto druhu syntaktický cukr byly nalezeny v HyperTalk, aby se zjednodušila syntaxe a zlepšila čitelnost běžného kódu.
V HyperCard 2.2 a novějších byla kolekce sbírek k dispozici také jako kontejner části
. To umožnilo skriptu adresovat všechny objekty v kontejneru pomocí jediného iterátoru.
Zpracování textu
Pozoruhodnou vlastností modelu kontejneru HyperTalk bylo jeho zpracování textu. Každá kolekce textu, ať už doslovný řetězec v programu nebo text zadaný do textového pole, byla sama považována za kontejner s více kolekcemi kontejnerů v něm. To umožnilo skriptům analyzovat text pomocí stejných navigačních příkazů jako jakýkoli jiný kontejner. Například při analýze datového souboru s mezerami můžete chtít extrahovat třetí sloupec, například takto:
dát the Třetí slovo z theFilesText do colThree
Tato syntaxe umožnila skriptu „procházet“ textem a vyhledat konkrétní data, jako v tomto příkladu:
dát the za prvé charakter z the Třetí slovo z čára 5 z Kartu pole "sometext" do char
Tento proces zpracování textu jako kontejneru byl znám jako „chunking“ a funkce jako „chunk expressions“. Tyto stejné druhy výrazů byly použity ke zpracování manipulace se soubory spolu se sadou funkcí pro správu souborů. Následující kód otevře známý soubor, načte z něj, extrahuje data a poté soubor zavře:
na mouseDown Odpovědět soubor "Vyberte prosím textový soubor, který chcete otevřít." -li to je prázdný pak výstup mouseDown dát to do filePath -li tam je A soubor filePath pak otevřeno soubor filePath číst z soubor filePath dokud vrátit se dát to do CD fld "nějaké pole" zavřít soubor filePath soubor the textový styl z charakter 1 na 10 z Kartu pole "nějaké pole" na tučně konec -li konec mouseDown
HyperTalk také zahrnoval funkce pro blokování řetězců pomocí operace hledání podřetězce pomocí v
operátor. Následující kód najde všechny příklady daného vzoru pomocí v
jako součást opakovat
smyčka, zatímco offset
najde umístění tohoto vzoru v řetězci:
funkce replaceStr vzor,newStr,inStr opakovat zatímco vzor je v inStr dát offset(vzor,inStr) do poz dát newStr do charakter poz na (poz +the délka z vzor)-1 z inStr konec opakovat vrátit se inStr konec replaceStr
Seznamy a další sbírky
HyperTalk použil stejný blokovací systém k vytvoření struktur, jako jsou pole nebo seznamy. Taková struktura by byla vytvořena umístěním více datových položek do proměnné oddělených čárkami. Různé typy dat lze importovat do skriptu HyperTalk pomocí řetězců, které by se podle potřeby analyzovaly. Například poloha objektů na obrazovce byla definována dvojicí čísel představujících souřadnice X a Y vzhledem k levému hornímu rohu. Následující kód vytvoří proměnnou nazvanou poz který drží pár souřadnic, a poté s tím manipuluje, aby přemístil všechna tlačítka na kartě v úhlopříčce z levého horního na pravý dolní:
na mouseUp dát "100,100" do poz opakovat s X = 1 na the číslo z Kartu tlačítka soubor the umístění z Kartu knoflík X na poz přidat 15 na položka 1 z poz konec opakovat konec mouseUp
The položka
chunking výraz byl původně založen na čárce oddělovač, ale novější verze HyperCard to změnily na hodnotu itemDelimiter
, která nabízí možnost analyzovat libovolné seznamy a struktury.
Zprávy a události
HyperTalk použil objektově orientovaný koncept pro volání skriptů, přičemž objekty v zásobníku odesílaly „události“ jako zprávy které by zpracoval manipulátory kteří deklarovali svůj zájem na přijímání událostí pomocí na
syntax. Například většina kontejnerů GUI by poslala mouseDown
zpráva při kliknutí na tlačítko myši a poté a mouseUp
zpráva, když byla vydána, zatímco je stále nahoře na tomto kontejneru, a skript mohl tyto události zachytit takto:
na mouseUp - sem vložte další kód konec mouseUp
Zprávy o událostech byly nejprve odeslány do skriptu v objektu, který událost vytvořil, například pokud uživatel klikl na tlačítko mouseUp
na toto tlačítko byla poprvé odeslána zpráva. Pokud objekt skriptu tlačítka neměl a mouseUp
handler (nebo vůbec žádný skript), byl poté předán na kartu, na pozadí, do zásobníku, do všech zásobníků, jejichž skripty byly explicitně importovány pomocí začít používat
příkaz „home stack“ (uživatelem vybraný vždy otevřený zásobník HyperCard) a nakonec samotná aplikace HyperCard.
U mnoha jednoduchých událostí, jako je kliknutí myší na tlačítka, by byl skript umístěn přímo do daného objektu, tlačítka samotného. Například je možné použít ukázkový kód výše v obslužné rutině tlačítka tímto způsobem:
na mouseUp opakovat s i = 1 na the číslo z Kartu pole skrýt pole i konec opakovat konec mouseUp
V případě, že byl kód volán z více míst nebo byl používán jako globální obslužný program pro událost, mohl skript určit původního odesílatele události pomocí cílová
funkce. Podobně by skripty mohly posílat události do jiných kontejnerů pomocí poslat
příkaz a poté pomocí navigačního kódu odkazovat na kontejner obsahující tento kód obslužné rutiny:
poslat "mouseUp" na Kartu knoflík "OK" z Kartu „Pravdivost“
Kombinace zpracování řetězce HyperTalk s dělat
příkaz umožňující konstrukci interaktivních tlumočníků umístěním textového pole na kartu a následným umístěním tohoto kódu do skriptu pole:
na mouseUp vybrat the clickLine dát slovo 2 z the clickLine do linenum dělat čára linenum z CD fld 1 konec mouseUp
clickLine
je globální vlastnost, která vrací název a číslo řádku posledního klikaného pole ve formě jako „řádek 10 pole karty 4“. Tento kód nejprve vybere celý text na kliknutém řádku, poté extrahuje číslo řádku do místní proměnné a poté použije dělat
spustit text jako skript HyperCard.
The mouseDown
zpráva byla odeslána tlačítku, když na něj uživatel klikl, a mouseUp
bylo odesláno, když uživatel uvolnil myš uvnitř, aby spustil svou akci. Podobně zasílala HyperCard pravidelně líný
zpráva, mouseEnter
, mouseLeave
, ... a různé další zprávy týkající se navigace mezi různými kartami v zásobníku HyperCard, stejně jako vstup uživatele (keyDown
, funkční klíč
, ...) a systémové události. Co se týče skriptů, neexistovaly žádné smyčky hlavní události jako v jiných procedurálních programovacích jazycích.
Ovládání HyperCard
Na rozdíl od obecného rychlý vývoj aplikací platformy, balíčky HyperCard vždy vypadaly jako hromádky - panel nabídek byl HyperCard a nikoli programátor (ve výchozím nastavení - skriptování mohlo přidávat, mazat a upravovat nabídky), jediné okno mělo pevnou velikost (v dřívějších verzích) a v některých případech příkazy, které byly ústředním bodem operace, byly součástí samotné aplikace a nebyly přímo dostupné v samotném HyperTalk.
Dobrým příkladem toho bylo vytvoření nových karet, které byly součástí aplikace a nebyly přímo přístupné ze samotného jazyka HyperTalk. Nová karta mohla být vytvořena pouze pomocí položky nabídky Nová karta, kterou lze simulovat v kódu pomocídoMenu "Nová karta"
. Zatímco HyperTalk volal do příkazů nabídky, příkazy nabídky také vyvolávaly obslužné programy v HyperTalk. Chcete-li spustit vlastní kód, když byla vybrána položka nabídky Kopírovat, umístili byste skript do zásobníku pomocí na doMenu itemName
psovod a poté zkoumat název položky
zjistit, zda to bylo „Kopírovat“.
HyperTalk také poskytoval kontrolu skriptů nad vestavěnými nástroji pro kreslení, jednoduše skriptováním potřebných změn v nástrojích pro malování a simulováním pohybů myši pomocí táhnout z Start na konec
a klikněte na pozice
příkazy.
Odpuštění sémantiky
Jedním z jedinečných rozdílů mezi programovacím jazykem HyperCard HyperTalk a zdánlivě podobnými jazyky, jako je AppleScript, bylo, že skripty HyperTalk byly shovívavější v tom, jaký vstup akceptovaly.
Kromě výše uvedené implicitní deklarace proměnných, když jim byla přiřazena hodnota, a způsobu, jakým byly hodnoty implicitně převedeny mezi typy (což vám umožňuje např. Požádat o znak 2 z 1234
), HyperCard by také rozpoznal určité výrazy a extrahoval z nich podhodnoty.
Například:
dát the selectedLine z Kartu pole "Seznam" do výběr - dává 'řádek 2 až 3 pole karty "Listbox"'vybrat čára 1 z Kartu pole "Seznam"vybrat čára (slovo 2 z výběr) z Kartu pole "Seznam"vybrat (the selectedLine z Kartu pole "Seznam") - závorky přidány pouze pro ilustraci
nebo
hrát si cembalo C E Ghrát si cembalo „c e g“dát „c e g“ do melodiehrát si cembalo melodie
Zatímco konečný výsledek vypadal podobně jako skripty jako rozšíření proměnných skriptu Bash před analýzou, byla to syntaxe zvláštních případů a neměla úskalí, kde by se data vyhodnocovala jako kód. Takže například všechny následující jsou chyby syntaxe v melodii, nikoli volání funkcí:
hrát si cembalo „c e g ()“dát „c e () g“ do melodiehrát si cembalo melodie
Rozšíření HyperTalk
Přestože jazyk HyperTalk chřadl stejně jako samotná HyperCard, dostal druhý nájem na život prostřednictvím protokolu pluginu, takzvaných externích příkazů (XCMD) a externích funkcí (XFCN), což byly kontejnery nativního kódu připojené k zásobníkům (specifické pro Macintosh zdroje ) s jediným vstupním bodem a návratovou hodnotou. XCMD a XFCN lze volat stejně jako běžné obslužné rutiny zpráv a funkcí ze skriptů HyperTalk a také mohou posílat zprávy zpět do aplikace HyperCard. Někteří autoři XCMD přidali do jazyka pokročilé funkce, jako je plná barevná podpora (ColorizeHC, HyperTint, AddColor), více speciálních oken (Prompt, Tabloid, Textoid, Listoid, ShowDialog, MegaWindows), podpora drag and drop a různá hardwarová rozhraní.
Potomci HyperTalk
Rozličný skriptovací jazyky implementovali nadmnožinu HyperTalk:
- CompileIt! -Talk - zásobník HyperCard a XCMD od Tom Pittman který umožňoval kompilaci nativního 68 000 strojového kódu (např. pro XCMD a XFCN) z kódu HyperTalk a volání nativních rutin nástrojů Macintosh. CompileIt bylo bootstrapped, to znamená, že novější verze byly kompilovány pomocí dřívějších verzí.
- Double-XX-Talk (?) - Double-XX byl lehký klon HyperCard, který byl dodáván jako doplněk CompileIt! a povolil běh XCMD a XFCN bez HyperCard a dokonce zahrnoval malého interpreta HyperTalk.
- MediaTalk - jazyk Oracle Media Objects, potomek Plus a první cross-platformový klon HyperCard. Navíc jediný, který byl skutečně modulární.
- PlusTalk (?) - Spinnaker Plus (původně německého formátu Verlag), který byl použit jako základ pro Oracle Media Objects.
- SenseTalk - Jazyk původu NeXT HyperSense a testovací nástroj založený na VNC Lilek.
- SuperTalk - Jazyk SuperCard, první klon HyperCard, Bill Appleton. Appleton také napsal populární World Builder dobrodružná stavebnice.
- Přepis (dříve revTalk a MetaTalk) - Jazyk implementovaný v LiveCode (dříve Revolution and MetaCard) softwarová platforma a vývojové prostředí. MetaCard byl časný klon HyperCard od Unixu, který běžel na klasických Mac OS, Mac OS X, Windows, Linux a Solaris.
- XION - Původně jazyk open-source klonu HyperCard, který se nikdy neuskutečnil. Nyní implementováno jako OpenXION.
Tyto klony a dialekty (běžně označované pod přezdívkou xTalk -languages) přidal do jazyka různé funkce, které se očekávají od moderního programovacího jazyka, jako je zpracování výjimek, vlastnosti definované uživatelem, časovače, vícevláknové zpracování a dokonce i objekty definované uživatelem.
Existují také jazyky, jejichž syntaxi a strukturu nelze uvěřit vlivům HyperTalk, například:
- ActionScript - skriptovací jazyk pro Adobe Flash
- AppleScript - hlavní skriptovací jazyk Apple Mac OS.
- Žargon - programovací jazyk Macromedia Director začínal syntaxí typu xTalk, ačkoli současné verze šly směrem, který se podobal spíše JavaScriptu.
- JavaScript - skriptovací jazyk vytvořený Brendan Eich který je běžně implementován jako součást a webový prohlížeč za účelem vytvoření vylepšeného uživatelská rozhraní a dynamický webové stránky.[4] Později byl zobecněn a standardizován jako ECMAScript.
Mnoho názvů metod, které HyperTalk poprvé popularizoval, se dostalo do pozdějších jazyků, například onmouseup
obsluha události v JavaScriptu.[5] Ačkoli Asymetrix ToolBook je často také považován za klon HyperCard, jeho skriptovací jazyk se zjevně málo podobá HyperTalk.
Viz také
- Informovat 7 - programovací jazyk s podobně anglickou syntaxí
Poznámky
- ^ Což se zase dalo načíst z textových souborů.
Reference
- ^ A b Flynn, Laurie (1989-02-27). „Apple Ponders Standardizing on HyperTalk“. InfoWorld. p. 31.
- ^ Dave Kelly, „Trade Tools: CompileIt! 2.0!“, MacTech, Sv. 7 č. 9
- ^ Erland Sommarskog a Frank Kalis, „Prokletí a požehnání dynamického SQL“, 23. června 2011
- ^ Eich, Brendan (1998). "Úvodní slovo". v Goodman, Danny (vyd.). JavaScript Bible (3. vyd.). John Wiley & Sons. ISBN 0-7645-3188-3. LCCN 97078208. OCLC 38888873. OL 712205M.
- ^ Brendan Eich, „Úvodní úvodní slovo 2011, snímek 10“
externí odkazy
- Stránky Wiki Pantechnicon HyperTalk - Odkaz na jazyk HyperTalk (řídicí struktury, události, integrované funkce atd.)