出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/09/24 09:58 UTC 版)
|
|
この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。 (2024年9月)
|
| パラダイム | 手続き型, イベント駆動型 |
|---|---|
| 登場時期 | 1987年 |
| 設計者 | Dan Winkler |
| 開発者 | Apple |
| 影響を受けた言語 | 自然言語, Pascal |
| 影響を与えた言語 | ActionScript, AppleScript, ECMAScript, JavaScript, Lingo, LiveCode, SenseTalk, SuperTalk |
HyperTalk(ハイパートーク)はHyperCardに用いられるプログラミング言語。
インタプリタ方式を採用するスクリプト言語で、その文法は英語に近く、初心者にもなじみやすい。
HyperCard開発チームのダン・ウィンクラーがデザインした。拡張性を考え、XCMD(外部コマンド)とXFCN(外部関数)という機構も用意され、プラグイン的に機能を追加可能である。
HyperCardがオブジェクト指向環境の為、それぞれのスクリプトは、HyperCardのスタック上のオブジェクトであるカードやボタン、フィールドなどのパーツ(オブジェクト)に付随する。
簡単な例
on mouseUp
Beep
put sqrt(2+4) into card field "計算結果"
end mouseUp
この例は、このスクリプトが付加されているオブジェクト(パーツ)の上で、 マウスがクリックされたら、ビープ音を鳴らし、 2と4を加えた結果の平方根を、このオブジェクトが乗っているカードに存在する『計算結果』という名のフィールドに送る。 mouseUpとなっているのは、マウスクリックのチャタリングを防止するために、クリック後のアップを取り出している。
on «命令名/メッセージ名»〜end «命令名/メッセージ名» または function «関数名» 〜 end «関数名» に挟まれた行内に記述する。
on~end 、function~end で挟まれていない内容は無視される。後述のキーワードが含まれる場合などでは、文法エラーになることもある。answer、go、put 等)かキーワード(if、repeat、do 等)で始まる。
on mouseUp
answer "次のカードに進みますか?" with "はい" or "いいえ"
if it = "はい" then
go next
end if
end mouseUp
sin、max、random等)や、システムの状態等を取得する処理(time、date、systemVersion 等)を関数と呼ぶ。関数は the «関数名» of «パラメータ» または «関数名»(«パラメータ») の形で呼び、命令や関数、キーワードのパラメータ内で使用することができる。
id、name、rectangle、location、highlight 等)をプロパティと呼ぶ。プロパティを設定する場合はset命令を用いる(変更不可のプロパティも存在する)。プロパティを参照する場合は the «プロパティ名» of «オブジェクト名、オブジェクトID等» の形で記述し、関数呼び出しに似ている。on mouseUp
if the highlight of card button "時刻" = true then
set the name of card button ID 1 to the time
end if
if the highlight of card button "日付" = true then
set the name of card button ID 1 to date() -- 低速な関数のコール方法である
end if
end mouseUp
put 命令によって値を設定することができ、命令や関数、キーワードのパラメータとして渡した場合は、コンテナ名として記載した部分が値で置き換えられる。
on mouseUp
put card field "augend" into value1
put card field "addend" into value2
put value1 + value 2 into sum
put sum into message box -- 「into message box」は省略しても機能する
if sum < 0 then
answer "結果がマイナスになりました。"
end if
end mouseUp
global キーワードで宣言する必要がある。ローカル変数には宣言は必要ない。
put 命令の値の代入先として指定する。ただし it 変数は answer 命令や get 命令等の結果の格納先として暗黙的に使用される。card は cd、background は bg、 button は btn、 field は fld と短縮可能。ID は id 、 on mouseUp は On MouseUp と記述しても同じ動作をする。また、 "hypercard" = "HyperCard" の評価値は true である。~(チルダ)を記述する。-- から改行までは、コメントとして扱われる。char、item、word、lineのインデックス指定や、オブジェクト番号によるbutton、field、card、background の指定には、インデックス番号を後置する記法と、序数詞を前置する記法がある。序数詞はfirst~tenthの他に、特殊なものとしてlast、middle、any[3]が使用できる。-- インデックス番号を後置する記法
get char 1 of theString
go to card 2
-- 序数詞を前置する記法
get first char of theString
go to second card
ここでは、初心者が初めて学ぶ言語として広く浸透しているC言語を例に比較する。
HyperTalk
put "10,20,30,40"&return&"100,200,300,400" into array -- 「&return&」は改行を意味する
put item 2 of line 1 of array + item 2 of line 2 of array into A
answer "A="&A -- 「A=220」とダイアログに表示
補足: より正確には、&return& は定数 return の内容(改行)と前後の文字列を & 演算子で連結することを意味する。
C言語
int A,array[][]={{10,20,30,40},{100,200,300,400}};
A = array[0][1] + array[1][1];
printf("A=%d",A);
また、C言語よりも比較的自由に文字列処理が可能である。
put "ABC,DEF,GHI"&return&"GHI,DEF,ABC" into array
put item 2 of line 1 of array & item 2 of line 2 of array into A
answer A -- 「DEFDEF」とダイアログに表示
次に、代表的なオブジェクト指向言語であるJavaを例に比較する。
set 命令を使用する。on mouseUp ~ end mouseUp 内に処理内容を記述したスクリプトは、マウスが離されたイベントを受け取る例である。=、is)、連結(&、&&)、含有判定(contains、is in)のための演算子が用意されている。length(《文字列》)、number of chars in 《文字列》)、特定文字列の出現位置取得(offset(《検索文字列》,《被検索文字列》))は関数を使用して行うことができる。char)や、区切り文字(item、word、line)を使用したインデックス指定により、文字列の一部の抽出、変更などの処理を比較的柔軟に行うことができる。なお、HyperCardではボタンやフィールド等の配置はスタックの保存データから自動的にロードされるものであるため、オブジェクトの生成に関してはJavaとの単純な比較ができない。
HyperTalk
put the highlight of card button "I Agreed" into agreed
set the enabled of card button "OK" to agreed
Java
// agreedCheckBox, okButton に値が入っているとする
boolean agreed = agreedCheckBox.getState();
okButton.setEnabled(agreed);
start usingを実行したスタック、XCMDやXFCN、カードの移動を伴う場合は移動先のカード/バックグラウンド/スタック等が経路に含まれる。 styleは、スタイルシートのことではなく「checkbox」「radio」「rectangle」「transparent」等のボタンの種類を示す文字列である。