これは RuntimeRevolution 1.1.1 のヘルプにある文書を邦訳したものです。この文書の文責はUDIにあり、またUDIはこの文書についての一切の債務を負いません。 間違いがありましたら eudio@chabashira.co.jp までお知らせ下さい。この文書は必要と思われる時に適宜アップデートされます。
Help -> Revolution Documantation -> Development Guide -> Developing with Revolution -> About... Revolution for experienced developers
About Revolution for experienced programmers
プログラミング経験者のための Revolution
==============
参照:
--------------
Supported Platforms Reference, Getting Started Tutorial, Independent Study Tutorial
このトピックは、従来のプログラミング言語( C、C++、Java など)による開発経験を持つ、Revolution の新規開発者に向けて書かれたものである。ここでは Revolution による開発過程の概要と、そのプログラミングモデルを解説する。
このトピックをきちんと理解するには、手続き型プログラミングの基本(サブルーチン、関数、条件文、変数)を理解している必要がある。またモダンインターフェースデザイン(ウィンドウ、ダイアログボックス、メニュー)の理解も必要である。もし従来の手続き型言語を使ってモダンOS用のアプリケーションをコンパイルしたことがあるなら、このトピックは充分に理解可能だろう。
Contents:
Moving Into Revolution
The Revolution Development Environment
Revolution's Object Model
The Transcript Language
The Development Process
Moving Into Revolution
Revolutionへの移行
Revolution は、インターフェースデザイン、プログラムコードの編集、そしてテスト環境までを統合した開発環境である。つまりひとつの環境でインターフェースを作り、別の環境でコードを書いて、それらを統合する、というやりかたではなく、開発環境上で直接インターフェースを作ることが出来る。まるでドローツールのように、作成中のアプリケーションウィンドウへボタンやテキストフィールドなどをドラッグドロップする。これらのオブジェクトの外見や動作はプロパティパレットを使って編集する。
その後 Transcript 言語を使ってそれぞれのオブジェクトにコードを書き込む。コードはオブジェクトと直接結びつけられている。(例えばそのボタン用のコードがボタン自身に書かれているなら、そのボタンをコピーペーストして使用できる) オブジェクトのプロパティは開発環境のプロパティパレットから操作するだけでなく、Transcript プログラムから直接変更することも出来る。これはインターフェースの外見や動作を、アプリケーション動作時に決めることが出来ることを意味する。
コンパイル/リンク/テスト、の繰り返しは不要である。テスト用ランタイム環境、インターフェースビルダー、そしてプログラムエディタは全てひとつにまとめられている。他の環境に切り替えることなく、アプリケーションのテスト中にそのままコードを編集して、インターフェースを変更することも出来る。 Development メニューの 'Suspend Revolution UI' を利用すれば、開発用パレットなどの Revolution パーツを排除して、「クリーンな」環境でアプリケーションをテストすることも出来る。
全てのテストが済んだら Distribution Builder を使って、ダブルクリックで起動するスタンドアローンアプリケーションにコンパイルする。あなたは Revolution のサポートするいずれかの、或いは全てのプラットホーム用のスタンドアローンを作ることが出来る。あなたの仕上げたアプリケーションは、各プラットホームに最適化された外見と動作を備え持つだろう。
Revolution と Transcript 言語は豊富な機能と複雑な処理をする能力をを持ち、その学習カーブはゆるやかである。経験豊かなプログラマであれば、チュートリアルを済ませたあと、ほんの数時間でアプリケーションを作り始めることが出来るだろう。
The Revolution Development Environment
Revolution の開発環境
統合された開発環境の中には、インターフェースビルダー、コードエディタ、デバッガ、ランタイム環境、そしてアプリケーションビルダーと言った、アプリケーションを作るのに必要なツールが全て含まれている。開発用のメニューやパレットやダイアログボックスは全て Revolution で作られている。これは単に Revolution エンジンのパワーやスピードを誇示するためにあるのではなく、必要ならこれらを調べたり、カスタマイズすることが出来ることを意味する。
Revolution のアプリケーション作成でよく使われる基本ツールとその使い方については、全てチュートリアルに書かれている。ここではその概要を説明する:
The browse and pointer tools:
ブラウズツールとポインタツール:
Revolution では、ドローツールでよく見られるようなツールパレットから、様々なツールを選択してインターフェースを作り上げる。ツールパレットを表示するには、Tools メニューから 'Tools Palette' を選択する。最もよく使われるのは、上部にある2つのツールである。
左側にある手の形をしてたものはブラウズ( Browse )ツールと呼ばれる。ボタンをクリックしたり、フィールドにテキストを入れるなど、ブラウズツールを使ってアプリケーションの動作テストをすることが出来る。
右側にある矢印の形をしたものはポインタ( Pointer )ツールと呼ばれる。ポインタツールはアプリケーションウィンドウ上のオブジェクトを選択する時に使われる。フィールドやボタンなどのオブジェクトを選択するには、ポインタツールでオブジェクトをクリックする。
The Properties palette:
プロパティパレット:
プロパティとは、Revolution オブジェクトの属性のことである。それぞれのオブジェクトは、そのオブジェクトの外見や動作を決定する、組み込みのプロパティを持っている。また、任意のオブジェクトにカスタムプロパティを設定することが出来、そこにはどんなデータでも入れることも出来る。
選択されているオブジェクトのプロパティにアクセスするには、Object メニューの 'Object Properties' を選択する。プロパティパレットの上部にはこのようなタブが並んでいる:
* 基本プロパティ (全てのオブジェクトに共通)(basic)
* オブジェクトのスクリプト(script)
* オブジェクトのカスタムプロパティ(custom properties)
* そのオブジェクトに特有のプロパティ(ボタンなどのオブジェクトでは、このタブが2つある)
The script editor:
スクリプトエディタ:
スクリプトエディタを使うには、オブジェクトのプロパティパレットで Script タブをクリックする。各オブジェクトは自分のスクリプトを持っている。スクリプトは Transcript コードで書かれており、オブジェクトの中にある。
Revolution のスクリプトエディタはテキストスタイルをサポートしているので、強調したい部分のカラーやフォントを変更したり、書きかけのコードに目印を付けたりすることが出来る。スクリプトエディタを開いている時に Script メニューから 'Find and Replace' を選択すれば、スクリプトを検索することも出来る。
The message box:
メッセージボックス:
メッセージボックスは、簡便なコマンド実行環境であり、ミニコンソールであり、計算機であり、また簡易コマンドテスターでもある。メッセージボックスで直接コマンドを実行したり、任意の式を評価させることが出来る。
メッセージボックスを開くには、Tools メニューから 'Message Box' を選択する。
The Application Overview:
アプリケーションオーバービュー:
オーバービュー(Application Overview)は、Revolution が開いている全てのファイルの全階層構造を表示するものである。ここでオブジェクトツリーをブラウズして、オブジェクトのプロパティやスクリプトにアクセスしたり、マルチメディアオブジェクトをプレビューしたり、オブジェクトの読込、移動、削除をすることが出来る。
オーバービューを開くには、View メニューから 'Application Overview' を選択する。
Revolution's Object Model
Revolution のオブジェクトモデル
Revolution のオブジェクトモデルは、オブジェクトベースである。オブジェクトには12のクラスがあり、それらはオブジェクト階層の中に組み込まれている。そしてオブジェクトは上位の階層の動作を継承する。ユーザーの操作やその他のイベントが起きると、Revolution エンジンが送るメッセージや、オブジェクト階層に沿って他のオブジェクトから送られてくるメッセージによって、プログラムが起動する。2つの例外を除いて、全てのオブジェクトは視覚情報を持っている。
オブジェクトは「〜である」ではなく「〜の一部としての〜」という形で他のオブジェクトとの関係を持っている。それぞれのオブジェクトはより上位の他のオブジェクトの一部である。例えばウィンドウにあるボタンはウィンドウの様々な情報を継承するが、ボタンはウィンドウの一種ではなく、あくまでウィンドウの一部である。
Object types:
オブジェクトタイプ:
Revolution のウィンドウはスタックと呼ばれる。そしてスタックはその他の全てのオブジェクトを含む、オブジェクト階層のトップに位置する。 Revolution の各ウィンドウもスタックで出来ている。 Revolution のパレット、ダイアログボックス、そして標準的なウィンドウも、全てスタックである。
Revolution の各ファイルはひとつ以上のスタックを含んでいる。一番最初のスタックはメインスタックと呼ばれ、そのファイル内の全スタックのオブジェクト階層の一部である。その他のスタックはそのメインスタックのサブスタックと呼ばれる。ファイル内のメインスタックを入れ替えるには、the mainStack プロパティを変更するか、アプリケーションオーバービューを使う。
各スタックはカードと呼ばれるスクリーン情報を1つ以上持つことが出来、それは二重にリンクされたリストで結ばれてる。カードはスタックウィンドウ内の部品の入れ物であり、一度に1つしか表示することは出来ない。各カードは異なったオブジェクトのセットを持つこともできるし、全てのカードで同じオブジェクトを共有することも出来る。スタックはカードの集まりであると言うことも出来る。
各カードは、ボタン、テキストフィールド、ビットマップイメージ、ベクターグラフィック、スクロールバー、ビデオプレイヤーとサウンドプレイヤー、そして( Unix システムでは) EPS オブジェクトを持つことが出来る。これらのオブジェクトはユーザーインターフェースとして働くので、コントロールと呼ばれる。
1つ以上の任意のコントロールをまとめてグループにすることが出来る。コントロールがグループに含まれている時、そのグループはコントロールのオブジェクト階層の一部となる。グループに1つ以上のグループを入れて、グループをネストすることも出来る。また、グループはスタック中の複数のカードで表示させることが出来る。
最後に、オーディオクリップ(audio clip)とビデオクリップ(video clip)は、サウンドやムービーのデータを持つオブジェクトである。オーディオクリップもビデオクリップもスタックウィンドウには現れない。そしてどちらも直接スタックに属するオブジェクトである。
Messages and the message path:
メッセージとメッセージパス:
メッセージパスとは、何らかの要求に対して、どのオブジェクトが反応するかを決定するためのルールである。
各メッセージには最初のターゲットがある。それはそのメッセージが最初に送られたオブジェクトである。例えばユーザーがウィンドウの中をクリックすると、クリックされたオブジェクトに mouseDown メッセージが送られる。もしそのオブジェクトがメッセージに対応したハンドラを持っていない場合は、そのメッセージはオブジェクト階層に従って次のオブジェクトに渡される。もしそのオブジェクトもメッセージのハンドラを持っていなければ、オブジェクト階層のトップに辿り着くまで、同様にして次のオブジェクトに渡され続ける。
pass コマンドや send コマンドを使って、通常のメッセージパスを飛び越えることが出来る。 また insert script コマンドや start using コマンドを使って、メッセージパスの指定した位置に、オブジェクトを挿入することも出来る。
Revolution は、キーボードタイピングなどのユーザーのアクションや、システムイベントに反応して、メッセージを送ってくる。 Revolution のメッセージの完全なリストは Revolution documentation の Transcript Dictionary セクションにある。また自分で定義したカスタムメッセージを任意のオブジェクトに送り、そのメッセージ用に書いたハンドラを実行させることも出来る。
Event-driven programming:
イベント駆動型のプログラミング:
Revolution は基本的にイベント駆動型である。全ての Transcript コードはメッセージハンドラの中にある。メッセージを受け取ったオブジェクトのスクリプトに、そのメッセージに対応するハンドラがあれば、メッセージを受け取った時に、そのハンドラが実行される。
イベントループや main() 関数は存在しない。スタックがオープンした時、カードが開いた時、そしてアプリケーションが起動した時に、Revolution はメッセージを送る。アプリケーションの初期化が必要な場合は、これらのメッセージを受け取るハンドラを書けばよい。
Scripts:
スクリプト:
各オブジェクトはスクリプトを持つことが出来、そこに含まれる全ての Transcript コードはそのオブジェクトと関連づけられている。スクリプトも、set コマンドで操作可能なプロパティのひとつである。各オブジェクトのコードは各オブジェクトの付属物であり、それはオブジェクトと同じファイルに保存される。
The Transcript Language
Transcript 言語
Transcript は英語に似た文法を持っており、可読性とメンテナンス性に優れている。スクリプトは内部でバイトコードのような表現にコンパイルされるので、インタプリタ言語の柔軟性を持ちながら、コンパイル言語特有のスピードを持ち合わせている。
ステートメントは改行かセミコロンで区切らなければならない。スクリプトエディタは制御構造を示すためにオートインデントでスペースを挿入するが、Transcript スクリプトはスペースを厳密には解釈しない。また大文字小文字を区別しない。
Script structures:
スクリプトの構造:
各オブジェクトのスクリプトには、ハンドラと呼ばれるルーチンが1つ以上ある。ハンドラには4つのタイプがある:
* メッセージハンドラは、オブジェクトがそのメッセージを受け取った時に実行される。メッセージハンドラは on で始まる。
* 関数ハンドラは、オブジェクト自身、あるいは下位階層のオブジェクトのハンドラから関数コールがあった時に実行され、多くは呼び出したハンドラに値を返す。関数ハンドラは function で始まる。
* SetProp (プロパティセット)ハンドラは、オブジェクト自身、あるいは下位階層のオブジェクトの、特定のカスタムプロパティを設定しようとした時に実行される。 SetProp ハンドラは setProp で始まる。
* GetProp (プロパティ取得)ハンドラは、特定のカスタムプロパティに対する読出し要求があった時に実行される。 GetProp ハンドラは getProp で始まる。
ひとつのオブジェクトのスクリプトにはこれらの任意のタイプのハンドラを含めることが出来る。それぞれのタイプのハンドラの数に制限はない。
Parameters:
パラメータ:
ハンドラには、値、或いは参照のパラメータを渡すことが出来る。パラメータの名前はハンドラの最初の行で定義する。各パラメータはカンマで区切られる。
例えば、あるカスタムメッセージ用のハンドラの第1行は、こんな感じになる:
on myMessage firstParam,secondParam,thirdParamこの 'myMessage' はハンドラ名であり、同名のメッセージが来た時にこのハンドラが実行される。このハンドラには 'firstParam'、'secondParam'、そして 'thirdParam' の3つのパラメータを渡すことが出来る。このハンドラを呼び出す文はこのようになる:
myMessage "Some string", 2, 8+4もし呼び出し側でパラメータに値を入れなかった場合は、ハンドラ側は空の文字列を受け取る。
put "something or other" into myVariableローカル変数は宣言や初期化を必要としない。もし存在しない変数に値を入れようとすると、ローカル変数が作られて、その値で初期化される。( explicitVariables グローバルプロパティを true にすれば、全ての変数に宣言が必要になる)
(field "Some Number") + someNumericVar + currentSum()Control structures:
put someFunction(firstParam,secondParam) into myVariable put myFunction() into field "Help"value 関数を利用すれば、メッセージパスを越えて、別のオブジェクトにある関数ハンドラを利用することも出来る。