HyperTalkパラダイム手続き型, イベント駆動型
登場時期1987年 (1987)
設計者Dan Winkler
HyperTalk(はいぱーとーく)はHyperCardに用いられるプログラミング言語。 インタプリタ方式を採用するスクリプト言語で、その文法は英語に近く、初心者にもなじみやすい。 HyperCard開発チームのダン・ウィンクラーがデザインした。拡張性を考え、XCMD(外部コマンド)とXFCN(外部関数)という機構も用意され、プラグイン的に機能を追加可能である。 HyperCardがオブジェクト指向環境の為、それぞれのスクリプトは、HyperCardのスタック上のオブジェクトであるカードやボタン、フィールドなどのパーツ(オブジェクト)に付随する。 簡単な例 on mouseUp Beep put sqrt(2+4) into card field "計算結果"? end mouseUp この例は、このスクリプトが付加されているオブジェクト(パーツ)の上で、マウスがクリックされたら、ビープ音を鳴らし、2と4を加えた結果の平方根を、このオブジェクトが乗っているカードに存在する『計算結果』という名のフィールドに送る。mouseUpとなっているのは、マウスクリックのチャタリングを防止するために、クリック後のアップを取り出している。 ここでは、初心者が初めて学ぶ言語として広く浸透しているC言語を例に比較する。
概要
概念
一連の処理は、スタック、バックグラウンド、カード、ボタン、フィールドのプロパティであるスクリプトに書かれる。
処理内容は、on ≪命令名≫?end ≪命令名≫ または function ≪関数名≫ ? end ≪関数名≫ に挟まれた行内に記述する。これらに挟まれていない内容は無視される(文法エラーになることもある)。
処理を示す行は、必ず命令(answer、go、put 等)かキーワード(if、repeat、do 等)で始まる。
関数や、単なる数値や文字列で文を始めることはできない。この点、HyperTalkでは命令と関数には明確な区別が存在する。
HyperTalkでいうキーワードは、同名の命令や変数を定義(オーバーライド)することができない予約語のこと。主に制御構造を示すキーワードを文頭に置くことができる。先述のon、function、end もキーワードに該当する。
なお、先頭にインデントを示す空白を入れることは可能で、スクリプトエディタではif やrepeat の深さに応じて自動的にインデントが挿入される。
パラメータに対する計算処理(sin、max、random等)や、システムの状態等を取得する処理(time、date、systemVersion 等)を関数と呼ぶ。関数は the ≪関数名≫ of ≪パラメータ≫ または ≪関数名≫(≪パラメータ≫) の形で呼び、命令や関数、キーワードのパラメータ内で使用することができる。
組み込み関数は両方の記法でコールできるが、前者の方が高速である。非組み込み関数は後者の記法でコールする必要がある。
ボタンやフィールド、カード等のオブジェクトが持つ属性(id、name、rectangle、location 等)をプロパティと呼ぶ。プロパティを設定する場合はset命令を用いる(変更不可のプロパティも存在する)。プロパティを参照する場合は the ≪プロパティ名≫ of ≪オブジェクト名、オブジェクトID等≫ の形で記述し、関数呼び出しに似ている。
値を内部に含むものをコンテナと呼ぶ。変数、メッセージボックス、ボタン、フィールドなどがコンテナに該当する。put 命令によって値を設定することができ、命令や関数、キーワードのパラメータとして渡した場合は、コンテナ名として記載した部分が値で置き換えられる。
コンテナで保持する値には型は存在せず(文字列型のみ)、算術計算に使用した場合は自動的に数値に変換され、ブール値は true、false の文字列で扱う。
変数にはグローバル変数とローカル変数がある。グローバル変数として使用する前には global キーワードで宣言する必要がある。ローカル変数には宣言は必要ない。
いずれも、値を代入する場合は put 命令の値の代入先として指定する。ただし it 変数は answer 命令や get 命令等の結果の格納先として暗黙的に使用される。
他、文法に関する細かい仕様
行の区切り文字は改行である。1つの処理を複数行で記述したい場合は、行末に ~(チルダ)を記述する。
大文字と小文字は区別されない。 on mouseUp は On MouseUp と記述しても同じ動作をする。また、 "hypercard" = "HyperCard" の評価値は true である。
-- から改行までは、コメントとして扱われる。
例
他言語との比較
C言語との比較
C言語は文章の区切りとしてセミコロンを使い、比較的自由な表記が可能であるが、スクリプト言語であるHyperTalkは改行が文章の区切りとなるため、文章の途中で改行するとエラーになる。例えば「put "Hello, World!" into A」と表記すべきところを「put "Hello,(改行) World!" into A」と表記するとエラーになる。
変数宣言や関数宣言が不要であり、また代入する値(整数、小数、文字列)を意識せずに変数に代入できる。
例えばAという変数に「10」という整数が入っていたとしても、新たに宣言することなく「0.5」という小数や「ten」という文字列を入れることが出来る。
ただし、文字(列)が入った変数に整数を加算する…といった動作はエラーとなり動かないため注意が必要である。尚、文字列と文字列、もしくは文字列と数値を繋げる記号は「&」である。
また、数値間での型違い(整数、小数、符号付き・無し)が無いため、例えば、「0.5*4」「0.5+1.5」といった小数を元にした計算でも、結果が整数となる物は強制的に整数となり(小数点以下が無くなった状態で)代入される。一方、C言語では最も上位の型に変換され、最終的に代入する変数の型で決定される。このため、例えば「float型 = double型*int型」といった場合は最終的にfloat型に丸められた値が代入される(詳しくは型変換を参照)。
変数の適用範囲もC言語とほぼ同じで、例えばある関数で使われた変数は呼び出した別の関数では適用されない。ただし、グローバル変数はこの限りではない。
Size:17 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)』
担当:undef