これは RuntimeRevolution 1.1.1 のヘルプにある文書を邦訳したものです。この文書の文責はUDIにあり、またUDIはこの文書についての一切の債務を負いません。 間違いがありましたら eudio@chabashira.co.jp までお知らせ下さい。この文書は必要と思われる時に適宜アップデートされます。なお、実際のヘルプにはボタンやフィールドがありますが、ここでは訳文のみを載せます。
Help -> Using the Starter Kit
1. Introduction
始めに
無料で提供されている Revolution Starter Kit は Revolution の完全な機能を持っており、Revolution の全ての開発機能にアクセスすることが出来る。 Starter Kit は単なるデモ版ではなく、例えば Revolution がサポートする全てのプラットホームの、完全なスタンドアローン・アプリケーションを作ることが出来る。あなたは無料の Starter Kit を使って、何の対価も払わずに、商用アプリケーションさえ配布可能である。これは趣味プログラマと中小企業ユーザーにとって理想的と言える。
Starter Kit はライセンスを取得した Revolution のコピーと違って、編集出来るスクリプトの長さに制限がある。( Revolution のライセンス・オプションや、ライセンスを取得して Starter Kit の制限を外す方法については、ヘルプメニューの "License Revolution" を参照のこと) Starter Kit の主な制限は、コンパイル出来るスクリプトが 10ステートメントに限られていると言うことだけである。
もしあなたが本気で Revolution で開発を行いたいと考えているなら、あなたの Revolution のコピーを便利で実用的なものにするために、ライセンスを取得してスクリプトの制限を解除しなさい。しかし、ちょっとしたツールや小さなアプリケーションを時々作るだけならば、Starter Kit はそのままで充分役立つだろう。
コードはオブジェクトにつき 10ステートメントに制限されているが、あなたはこの制限に直面してこう考えるだろう。例えばオブジェクトは独立して機能しているのではない。あるオブジェクトが他のオブジェクトにメッセージを送って、二つ目のオブジェクトのハンドラを起動することもある。これは長さ制限を越えたスクリプトを他のオブジェクトに移すことにより、より長いスクリプトを書ける可能性があることを意味する。
このセクションでは、Starter Kit の範囲内で、Revolution の全機能を使うための手助けをする。スクリプトを分割する手間さえ厭わなければ、何百行のスクリプトでも書くことが出来るようになる。
このセクションを始める前に、あなたは少なくとも最初のチュートリアル Getting Started を済ませて、Revolution アプリケーション作成の基礎を学んでおかなければならない。各ツールを使ってオブジェクトを作り、スクリプトを編集し、メッセージボックスからコマンドを実行する方法を修得しておく必要がある。
各ページが済んだら、ウィンドウの右下にある右矢印ボタンをクリックして、次に進みなさい。
2. The script limits in detail
スクリプトの制限について
あなたはまず最初に、Starter Kit にどんな制限があるのかを知りたいだろう。 Transcript の scriptLimits関数は、あなたの持っている Revolution のコピーの、制限事項をリストアップする関数である。まずはそれを試そう...
1. Tools メニューの "Message Box" を選択して、メッセージボックスを表示させる。(メッセージボックスとは Transcript のステートメントを1行だけ実行したり、関数の実行結果を得ることが出来る、手軽なコマンドライン・パレットである)
2. 次の行をメッセージボックスに入力する。
put the scriptLimitsそして Return キーを押す。
on mouseUp -- line 1 put random(8) into myRandomNumber -- line 2 if myRandomNumber is 1 then -- 数えない answer "The number is 1." -- line 3 else if myRandomNumber is 2 then -- 数えない answer "The number is 2." -- line 4 else if myRandomNumber is 3 then -- 数えない answer "The number is 3." -- line 5 else if myRandomNumber is 4 then -- 数えない answer "The number is 4." -- line 6 else if myRandomNumber is 5 then -- 数えない answer "The number is 5." -- line 7 else if myRandomNumber is 6 then -- 数えない answer "The number is 6." -- line 8 else if myRandomNumber is 7 then -- 数えない answer "The number is 7." -- line 9 else if myRandomNumber is 8 then -- 数えない answer "The number is 8." -- line 10 end if -- 数えない end mouseUp -- 数えないline 1 は mouseUp ハンドラの第1行目であり、このハンドラがユーザーがボタンをクリックした時に実行されるものであることを示している。これはスクリプト内の最初のハンドラの第1行目であるため、制限行の中にカウントされる。
on mouseUp answer "The number is" && random(8) & "." end mouseUpこの単純化は Starter Kit を使う上でのもうひとつの原則を暗示している:つまり Transcript 言語を良く知ることで、同じことをより少ない行で実現することが可能である。
on mouseUp -- グラフの書き換えを1度に見せるため lock screen -- フィールドデータを変数にコピーする put field "the data" into tData -- データの数を入れる put the number of lines in tData into tNoLines -- 変数の中で複数の行に跨っているデータを、 -- カンマ区切りのひとつのデータにまとめ、min/max 関数に備える replace return with comma in tData put ",0" after tData -- グラフの最大の高さは 60ピクセルである -- それぞれの値をスケーリングするために、 -- 最大の値を変数 tMax に入れる put max(tData) into tMax -- 最小の値を変数 tMin に入れる put min(tData) into tMin -- 最大値と最小値の差を得る put tMax - tMin into tDifference -- 全ての値が 60 に収まるようスケーリングする put 60 / tDifference into tMultiplier -- 変数を初期化しておく put empty into tResult put empty into tFinalData -- それぞれの値を処理する repeat with i = tNoLines down to 1 -- ひとつの値の高さを計算する put trunc(item i of tData * tMultiplier) into tHeight -- ここでその値の座標を決める put i,0 into tResult put return & i,-1 * tHeight after tResult put return & i+1,-1 * tHeight after tResult put return & i+1,0 after tResult put return & i,0 & return & return after tResult -- グラフを描くための座標データ変数に、 -- 計算した座標を追加していく put tResult into line i of tFinalData end repeat -- ポリゴン( polygon )グラフィックのプロパティ設定 set the relativePoints of graphic "DataGraph1" to tFinalData -- グラフィックのスケールを 100ピクセル幅にする set the width of graphic "DataGraph1" to 100 -- グラフィックの位置 set the loc of graphic "DataGraph1" to 311,217 -- ランダムなカラーを決める put the random of 4 into tRandomNumber put item tRandomNumber of "dodgerblue1,red,yellow,green" \ into tColor -- カラーをセットする set the backGroundColor of graphic "DataGraph1" to tColor -- スクリーンの再描画 unlock screen end mouseUpこれをそのまま 10行に収めてみよう:
on mouseUp -- "idle" 時に常に unlock されるため、明示的な unlock は不要である -- 例えば何もスクリプトを実行していない時や、 -- mouseUp ハンドラが実行を終えた時に自動的に行われる lock screen -- replaceText 関数で行をデータに変換するときに、 -- ついでに ",0" も加えてしまう put replaceText(field "the data",return,comma) & ",0" into tData2 -- ここで複数行をいっきにまとめる -- この行は括弧の中から外に向かって順に実行される put min(60/(max(tdata2) - min(tdata2))) into tMultiplier -- 我々はフィールドの値を変数に入れずに、直接参照するようにした。 -- スクリプトが短くデータも少ないので、変数を使用した場合との -- パフォーマンスの違いは殆ど無いだろう。 -- またこれによりローカル変数が不要になった。 -- 必要なら local キーワードを利用して "put empty" を省くことも出来る。 -- local キーワードは制限される行としてカウントされない。 repeat with i = the number of lines of field "the data" down to 1 put trunc(line i of field "the data"*tMultiplier) into tResult -- ここでも複数の行をひとつにまとめている put i,0 & return & \ i,-1* tResult & return & \ i+1,-1* tResult & return & \ i+1,0 & return & \ i,0 & return & return into line i of tdata end repeat -- これらの行は前のスクリプトと同じ set the points of graphic "DataGraph1" to tdata set the width of graphic "DataGraph1" to 100 set the loc of graphic "DataGraph1" to 311,217 -- 最後に、ランダムなカラーを1行で作っている set the backGroundColor of graphic "DataGraph1" \ to item(random(4)) of "dodgerblue1,red,yellow,green" end mouseUp新しいスクリプトは 10行に収まったのに、25行あったオリジナルと同じ働きをする。
function calculatePoints tNoLines, tData, tMultiplier repeat with i = tNoLines down to 1 put trunc(item i of tData * tMultiplier) into tHeight put i,0 into tResult put return & i,-1 * tHeight after tResult put return & i+1,-1 * tHeight after tResult put return & i+1,0 after tResult put return & i,0 & return & return after tResult put tResult into line i of tFinalData end repeat return tFinalData end calculatePointsこの "calculatePoints" ハンドラは "Draw Graph" ボタンのスクリプトから取り分けたものである。そしてこれらの行を取り除いた部分に、"calculatePoints" ハンドラを呼ぶスクリプトを書く:
set the relativePoints of graphic "DataGraph1" to \ calculatePoints(tNoLines, tData, tMultiplier)ティップス:グループは、常にそこに含まれるオブジェクトのメッセージパスにある。これは、使えるオブジェクトがメッセージパス中に無い時 −例えばカードスクリプトが既に一杯になっている時− に、オブジェクトをグループ化して、そこに余ったスクリプトを( "calculatePoints" のような独立したハンドラとして)置くことが出来ることを意味する。
send "mouseUp" to button "myButton" of card 3この文は mouseUp メッセージを "myButton" に送っている。もし "myButton" のスクリプトに mouseUp ハンドラがあれば、それが実行される。そうでなければ、mouseUp メッセージは "myButton" ボタンのオーナーである card 3 に渡され、カードにある他の mouseUp ハンドラが実行される。
on mouseUp insert the script of button "front script example" into front ask "Find the factorial of what number?" answer myFactorial(it) remove the script of button "front script example" from front end mouseUpそして隠された "front script example" ボタンのスクリプト:
function myFactorial n if n div 1 = n and n >= 0 then put 1 into x repeat with i = n down to 2 multiply x by i end repeat else return "Input must be a non-negative integer." end if return x end myFactorial次に、do コマンドのパワーを調べてみよう。これを使うと、任意のテキスト −フィールドや、カスタムプロパティや、スクリプトで作った文字列− を実行することが出来る。
answer "Hello World" beep次に、これをメッセージボックスに入力して、Return キーを押す:
on mouseUp run some stuff put function1(w,h) into f_result run some more stuff handler2 x,y,k run some more stuff end mouseUpStarter Kit の制限が無ければ、"function1" も "handler2" も同じスクリプト内に一緒に置ける。しかし Starter Kit を使っていて、もしこれらのハンドラが 10行に収まらないほど長く複雑だったらどうしたら良いだろう?
on mouseUp do the mouseUpStuff of me end mouseUpこの例では、"mouseUpStuff" はオブジェクトのカスタムプロパティであり、mouseUp で実行すべきスクリプトが入っている。オブジェクトに置きたいスクリプトをそのままカスタムプロパティに入れて、do コマンドでカスタムプロパティにあるコードを実行している。
do the firstMouseUpStuff of me do the secondMouseUpStuff of me do the thirdMouseUpStuff of me do the fourthMouseUpStuff of me -- 9つ以上の "do" 文を置くことが出来るこのテクニックを insert script コマンドと併用することによって、スクリプトから使える関数ハンドラの数を増やして行くことが出来る。例えばボタンを作って、そのスクリプトに 9つの関数ハンドラを入れ、それぞれの関数ハンドラからボタンのカスタムプロパティコードを実行する do コマンドを実行させる。そのボタンを frontScripts や backScripts に insert すれば、あなたのオブジェクトはその 9つの関数を自由に使うことが出来る。
on mouseUp local n = 0, sumx = 0, sumxsq = 0 -- 以下をカスタムプロパティ ST1 に入れる put the milliseconds into t repeat with i = 1 to 40 + random(20) put random(1000)/10 into line i of k end repeat put k into fld "Data1" repeat for each line i in k add 1 to n add i to sumx add i^2 to sumxsq end repeat -- 以下をカスタムプロパティ ST2 に入れる put sumx/n into mean put (sumxsq - sumx^2/n)/(n-1) into svar put sqrt(svar) into myStdDev put sqrt((n-1)/n)*myStdDev into popdev sort lines of k ascending put line 1 of k into minX put line(-1) of k into maxX -- 以下をカスタムプロパティ ST3 に入れる if n mod 2 = 1 then put line (.5+n/2) of k into med else put .5*(line(n/2) of k + line(n/2+1) of k) into med end if put n div 4 into qx if n mod 4<>0 then add 1 to qx put line qx of k into Q1 put (3*n) div 4 into qx if (3*n) mod 4 <> 0 then add 1 to qx put line qx of k into Q3 -- 以下をカスタムプロパティ ST4 に入れる put mean, sumx, sumxsq, myStdDev, popdev, n, minX, Q1, med, Q3, maxX into thevars put me into theTitles repeat with i = 1 to the number of lines of me put line i of theTitles && \ item i of thevars into line i of ans end repeat answer "Statistical analysis:" \ & return & ans & return & return & \ "Time:" && the milliseconds - t end mouseupコードをカスタムプロパティに移動したあとは、ボタンスクリプトはこのようになる:
on mouseUp local n = 0, sumx = 0, sumxsq = 0 set the numberFormat to "0.##########" do the ST1 of me do the ST2 of me do the ST3 of me do the ST4 of me end mouseUpオリジナルのスクリプトを iMac 266 で実行すると、平均で 20 milliseconds を要した。 do コマンドを使ったものは僅かに遅く、その平均は 22 milliseconds であった。