GO BACK

Squeak教室 その5

「変数を使おう!」



■インスタンス変数とは?

 一応、テストでちょっと複雑な操作はできるようになりました。が、なんといっても「ある設定や命令を扱うだけ」では、やれることにも限界が出てきてしまいます。もうちょっと複雑なことをさせるためには、もっといろいろ計算ができないといけません。そのために必要となるのが「変数」です。

 変数は、さまざまな値の「入れ物」です。これに必要な値を一時的に保管し、必要に応じて取り出しながら動かしていけば、より複雑な計算もできるようになるわけです。——Squeakの部品では、「インスタンス変数」と呼ばれるものが作成できるようになっています。これを使い、必要な値を常に保ち続けることができるのです。

 では、ちょっとやってみましょう。とりあえず、サンプルとして「星」の部品を1つ作成しましょう。そして、そのビューワを開きます。このビューワのパネルの一番上にあるメニュー表示のアイコンをプレスし、現れたメニューから「新しいインスタンス変数の追加」を選んで下さい。すると、変数名を尋ねてくるので、とりあえず「A」と入力しておきます。すると、ビューワに「インスタンス変数」という新たなカテゴリが現れ、そこで変数「A」に関するパネルを利用できるようになります。


 この「インスタンス変数」っていうのは、「インスタンスで使う変数」ってものです。インスタンスっていうのは、平たくいえば、デスクトップに配置して使っているそれぞれの部品のことと考えればいいでしょう。

 Squeakでは、部品はいくらでも作れますね。もし「星の部品に変数を用意する」というようになったら、デスクトップに置いた2つも3つもある星ですべて同じ値しか使えなくなってしまいます。インスタンス変数ってのは、「配置したそれぞれの星ごとに用意される変数」ということです。つまり、3つの星が配置されていても、それぞれに異なる変数を置いて使えるわけですね。

 このインスタンス変数の値は、部品を廃棄しない限りずっと保ち続けられます。作製したスクリプトの実行が終わっても、値は消えたりしません。ずっとずっと値は残っていて、次にスクリプトを動かした時にはちゃんと前回の値が取り出せるのです。この点はよく覚えておきましょう。特に、多少プログラミングなんかをかじっていると、「変数はプログラムの終了時に破棄される」と思ってしまったりします。

 現在のインスタンス変数の値は、「インスタンス変数」カテゴリにある変数のパネルの値を変更することで、その場で変えられます。

 もし、「もうこのインスタンス変数はいらない」となったら、「インスタンス変数」カテゴリにある変数のパネルで、左端のメニュー表示用のアイコンをクリックし、現れたメニューから「さくじょする」を選んで下さい。これで作成したインスタンス変数は削除されます。


 これでインスタンス変数の作成と削除はできるようになりました。とりあえず、これで安心ですね。


■うずまきを描こう!

 では、実際に変数を使ってみましょう。——今の、星に「A」という変数を作成した、これをそのまま利用してみましょう。星のスクリプトパネルを用意し、以下の図のようにスクリプトを作ってみて下さい。



 変数「A」の値は、「1」に設定しておきます。あとは、だいたい今までやったものばかりですね。「以下を足す」というパネルがありますが、これは変数「A」の値の変更用パネルの「←」の左側にある上下三角マークをクリックすることで表示させられます。

 できたら、スクリプトを「チクタク」してみましょう。ぐるぐる模様を描き、自動的に止まります。なかなか面白いことができるでしょ?



 変数を使うと、こんな具合に「前回の値はいくつだっけ?」ということがわかるので、毎回値が変わるようなスクリプトが作れちゃうわけです。

 ただ、このスクリプトを見ればわかりますが、「A」の値が40になったら停止させるのに、まず「A」の値を1に戻してから、停止をしてしますね。ここで値を戻すのを忘れてしまうと、次回にはうまく動かなくなります。その辺りの「値の管理」というものを考えないといけなくなってきます。

 いわゆる「デバッグ」という作業が、こうなると必要になってきますね。プログラムのバグ(間違い)を探す作業です。こういうときには、スクリプトを動かしながら、今、変数の中身がどんな値になっているのか確認していくのが一番です。

 「インスタンス変数」カテゴリにある変数のパネルの一番左端に、メニューを表示するマークがありますね? これをプレスし、現れたメニューから「ちょっと見張る」か「じっくり見張る」を選んでみましょう。その変数の値を表示するパネルが現れます。これを適当なところにおいてスクリプトを実行すれば、リアルタイムに変数の中身を確認できます。


 また、「動くスピードが速すぎて値がよくわからない」というときは、「チクタク」の速度を遅くしましょう。スクリプトの時計マークの部分をマウスでずっと押し続けていると、「刻み値」というメニューが現れます。これは、1秒間に何回、このスクリプトを実行するかを示すものです。これで「1」にすれば1秒に1回しか実行されなくなりますし、「その他」を選んで「0.1」と入力すれば、10秒に1回しか動かなくなります。また、実行速度を速くすることもできますから、完成したらスピードアップして動くようにしておくこともできます。





■複数のスクリプトを組み合わせる

 さて、先ほどのスクリプトに戻りましょう。——このスクリプトでは、ペンの太さや色などを設定し、それから星を動かしていますね。でも、よく考えてみましょう。ペンの太さや色などは、毎回設定しないといけないものでしょうか。最初に設定しておけば、もう後は再設定不要のはずですね。

 変数などを使いある程度複雑なプログラムを作るようになると、「初期化の作業」と「実行する処理」を分けた方がよくなります。今回の例も、そのように2つのスクリプトに分けて作成してみましょう。



 ここでは、1つめのスクリプトに初期化の処理を、2つめのスクリプトに具体的な描画の処理と終了のチェックをそれぞれ設定しました。そして、1つめは「マウスアップ」でスタートするように設定してあります。これで、星のハロを使って位置を移動し、クリックすれば、その場にぐるぐるが描かれるようになります。

 ここでは、初期化の後に「スタートする」というパネルを使ってスクリプト2を呼び出しています。このように、スクリプトから別のスクリプトを呼び出すようにすることで、複数のスクリプトをお互いに呼び出しあいながら動かすことができるようになります。複雑なプログラムは、このようにして機能ごとにスクリプトを作り、それらを連携させて動かすのがよいでしょう。

 また、プログラミング言語では「条件分岐」と「繰り返し」という構文が標準的に用意されていますが、パネルには「テスト(条件によって分岐する)」だけしかなく、繰り返し構文に相当するものがありません。これも、複数のスクリプトを組み合わせれば可能なことがわかります。繰り返し部分を1つのスクリプトとして用意し、必要に応じてそれを「チクタク」させるのです。そうすれば、決まった処理を必要なだけ繰り返し実行できます。

 簡単な例として、「1から入力した数字までの合計を計算する」というスクリプトを作ってみましょう。普通のプログラミング言語ではごく初歩的な問題ですが、Squeakでは逆にけっこう大変ですよ(笑)。手順を説明しておきましょう。

1.まず、使用する部品として「テキスト」と「ボタン」を1つずつ配置します。テキストは、テキスト表示関係のハロを使ってフォントサイズなどを変更しておきましょう。また、「色」のハロで背景色なども調整しておくとよいでしょう。



2.ボタンのビューワを開き、まずインスタンス変数を作ります。「goukei」と「n」の2つのインスタンス変数を作って下さい。

3.スクリプトを作成します。今回は、「初期化」「繰り返し」「終了処理」の3つのスクリプトを作ります。スクリプトはわかりやすいよう、それぞれ「keisan」「loop」「owari」という名前に変更しておきました。そして、以下の図のように作成をします。「loop」は、刻み値を1000ぐらいにして速く動くようにしておくとよいでしょう。



4.これで完成です。——テキストに適当に数字を入力し、ボタンをクリックしてみましょう。1から入力した数字までの合計を計算し、テキストに表示しますよ。



 いかがですか? ごく普通の計算も、ちゃんとSqueakでできることがわかりますね。ただ、まぁ実行速度はお世辞にも速いとはいえないので、あんまり実用的じゃありません。だけど、こういう「複数スクリプトの連係」をしていけば、相当に複雑なことも可能だ、ってことはよくわかったことでしょう。

 

GO NEXT


GO HOME