« 私の牛がハンバーガーになるまで | トップページ | 使い分け;iPod TouchとiPhone »

2008年7月28日 (月曜日)

問2:付録

さて問2の原点に戻り思い出してみたい事があります。何かと言うと、元々の問いには次の図が使われていたという事です(ほんとかいな?)。

【図1】


Itoh021

ま「ほんと」ということで話を進めますが……。
そこで、次の二つの図を使って「原価率」と「値入額」をついでに表示させてしまうようにしてみます。ついでに先回「ウィンドウズには無関係」といった事を、せっかくマックにスイッチしたという事で“お祝い”代わりに解説しておきたいと思います。

【図2】


Itoh035

【図3】


Itoh036

【新規カードの作成】
いままでは、一枚のカードにスクリプトを書き込み、そのスクリプトを修正しながら色々な事を試してきました。今回は、新しいカードをスタックに追加して、上の図のようなカードに仕立て上げたいと思います。
まず新規カードの作成ですが、RevolutionメニューバーのObjectをクリックし、表示されたサブメニューからNew Cardを選択するか、問2のスタックをレヴォルーションで起動した最初の状態でコマンドキーとNキーを同時に押す事で新規カードの作成ができます。

新しいカードが無事作成できたら、そのカードにはオブジェクトがなにも無い「白紙」の状態ですから、ここに図2をコピー&ペーストし新しいオブジェクトを作成します。これで新しいカードの外見を決定するオブジェクトができあがります。

つぎに、最初のカードに戻り、既に作成済みのオブジェクト、つまり三つのフィールドと一つのボタンを新しいカードにコピー&ペーストでもってきます。レヴォルーションでのコピー&ペーストの方法も、他のアプリケーションと全く同じです。

【オブジェクトのコピー&ペースト】
まず最初のカードを表示させ、ポインターモードになっている事を確認した後、コピーしたいオブジェクトである、BaiKa、GenKa、 NeIreの三つのフィールドとKeiSanボタンをシフトキーを押しながらクリックしていきます。こうする事で、複数のオブジェクトを一度に選択できます。四つのオブジェクトが選択できたら、コマンドキーとCキーを同時に押してコピーします。
次に、先程作成した新しいカードに移動して、コマンドキーとVキーを同時に押します。すると、どうした事でしょう、簡単に四つのオブジェクトがペーストされるではありませんか(これはリフォーム番組風ですね)。ここまでできた処で、KeiSanボタンに書いてあったスクリプトもチャンとペーストされているか一応確認しておいてください。
必要なオブジェクトがペーストできたところで、位置決めを行います。

【新しいフィールド・オブジェクトの作成】
二枚目のカードには一枚目には無かったフィールドが二つ存在します。そのフィールドを作成しましょう。
この操作は、新規オブジェクトの作成でも既存のフィールドのコピー&ペーストでも行う事ができます。注意が必要なのはコピー&ペーストで作成した時には、必ず名前を変更しなければならないという事です。
新規フィールドの作成ができたら、上から四番目のフィールドは「GenKaRitu」、五番目は「NeIreGaku」と名前を付けます。


ここまでできたらテストです。計算ボタンをクリックしてみてください。エラーが表示されるはずです。もしエラーが表示されなかったら、これまでのどこかに誤りがあるという事です。
このエラーの原因は判りますか?

【メッセージ伝達の階層構造(ハイアラーキー<hierarchy>;日本語だとヒエラルキー)】
二枚目のカードにある計算ボタンをクリックすると、「KeiSanSuru」というメッセージが発生します。処がこのメッセージをトラップ(捕まえる)するハンドラがこのカードには存在しません。通常カードに書かれたスクリプトにこのメッセージを受けとるハンドラがない場合には、カードにこのメッセージが伝わります。カードにも受けとるハンドラがない場合には、システムに伝えられ、最終的にはメッセージは消滅します。
こうしたメッセージの流れを「メッセージ伝達の階層構造」と呼びます。この概念は結構難しいので、実は私自身も十分理解しているとは言いがたいのです。そこで、ここでの詳しい説明は遠慮させていただきますが、理解のヒントになるだろう事を次に挙げてみます。

○ 一枚目のカード・スクリプトには、ハンドラー「KeiSanSuru」があるのに反応しない。
○ スタックのスクリプトに、試しに「on KeiSanSuru 改行 put the target 改行 end KeiSanSuru」を書いてどうなるか実験する。実験後には必ずこのハンドラーを削除しておいてください。

このヒントで何となく判ったあなたは勘が良い、レヴォルーションのセンスがあると言えます。

■ ■ ■

さて二枚目のカードにも一枚目のカード同様スクリプトを書いていきます。
今回書くスクリプトのポイントは、新たに作成した二つのフィールドに計算結果を表示するハンドラーを追加するというものです。

原価率は値入率の逆数、値入額は売価と原価の差、になります。それらをハンドラとしてか来ていく事になりますが、ヒントはいままで書いてきたスクリプトにありますので、ここでは示さない事にして、ハンドラー名だけを指定しておきます。
原価率は「GenKaRitu」、値入額は「NeiReGaku」とします。


これらのヒントを元に、二枚目のカードにスクリプトを書いて行きますが、上述したように二つのハンドラーの追加が基本ですから、一枚目のカード・スクリプトの大半はそのまま使用できます。そこで一枚目のカード・スクリプトを二枚目のカードにコピー&ペーストして使う事にします。コピー&ペーストの方法は他のアプリケーションと同じなので説明は省きます。

ハンドラー「GenKaRitu」と「NeiReGaku」の内容は様々な書き方があります。今回は見本となるスクリプトを公開しないでおきますので、色々考えてみて自分なりのスクリプトを書いてみてください。

■ ■ ■

さて先回「ウィンドウズには無関係」と書いた件についてですが;
マルチ・プラットフォーム対応のレヴォルーションといえども、細かなところではプラットフォーム毎に特徴が出てしまいます。これはレヴォルーションの所為では無く、個々のプラットフォームの持つOSの特徴による処が大きいようです。
マルチ・プラットフォーム対応のアプリケーションを作成する時に、最も気をつけなければならないのはこうした細かな違いという事ですが、現段階ではこの点の詳しい説明はしないでおきます。唯今回特徴的な違い、とくに今回紹介したスクリプトに現れるマックとウィンドウズの大きな違いに関して少し触れておきます。

その特徴的な違いとは【スクリプト2の11】に書かれている次の一行にあります。『answer “WHAT do you WANT to GET ?” with “GenKa” or “NeIre” or “BaiKa” or “Cancel” as sheet 』
この一行内にある「as sheet 」という成句で、これはanswerコマンドを使った時に現れるウィンドウを、新規のウィンドウでは無く、既存のウィンドウからニュルニュルと現れる形式のダイアログボックス様のものにするためのものです。「as sheet 」を含む上の一行のステイトメントは、そのままでもウィンドウズで実行されエラーは発生しませんが、ウィンドウズにおいては「as sheet 」が無視され、通常の新規ウィンドウ形式のダイアログボックス様のものとなります。
私の好みですが「as sheet 」を使って表示されるものの方がエレガントでみやすいと思うのですが、ウィンドウズOSではこうした機能をサポートしていないので致し方がないですね。そうした情況から「ウィンドウズには無関係」と表現したのです。

ウィンドウズとマックと2種類のOSでレヴォルーションの開発ができる環境をお持ちの方は一度試してみてください。ユーザー・インターフェースの細かな違いが、使う側の負担を軽減する事が多いので、OSの違いによって現れるさ細な違いも見逃さず、作成するアプリケーションに反映させるという事は、これから先レヴォルーションでアプリケーションを開発しようとする人には重要な事だと思います。

【シートとして表示されるダイアログボックス】

Itoh037

ということで今回は模範?スクリプトを提示しないまま完成としました。

|

« 私の牛がハンバーガーになるまで | トップページ | 使い分け;iPod TouchとiPhone »