2009年2月22日日曜日

「Scratch programming for teens」が届いた

発注してから結構経つが、数日前にやっと表題の本が届いた。
今のところScratchについては英書としてこの本、そして日本語のものはアイデアブック、これら二冊しかないようだ。他にも各国語の本は出ているのかもしれないけど。

まだパラパラとめくってみた程度だが、アイデアブックとは趣きがちょっと異なるようだ。
アイデアブックは第一章冒頭で「あなたが小学生、中学生なら」なんてメッセージがあるので、子供でも自分で読み進められる事を考えてあるのだろう。紙もスベスベの上質紙でカラー印刷だ。
for teensの方はペーパーバックの本としては普通の紙で、白黒印刷。
内容的にも、各命令ブロックの説明など、リファレンス的内容も含まれている。
アイデアブックではその中で使うものだけにしか触れていないようだった。最初の導入としては必要なものだけに絞って説明する方が分かりやすいと思うし、成功していると思う。
大体の事は実際にいじってみれば分かるとは言え、アイデアブックを一通り終えた後もう少し網羅的な説明が欲しくなった時に「for teens」があると丁度良さそうだ。そういう意味では良い順番で手元に届いてくれた。

それで、また少しScratchをいじっていたが、また引っ掛かった事があった。

命令を繰り返すためのブロックはいくつか用意されている。
最も単純なものは「forever (ずっと)」で、いわゆる無限ループ。
for文的な「repeat [n] ([n]回繰り返す)」もある。
他に「repeat until [condition] ([条件] まで繰り返す)」と「forever if [condition] (もし [条件] なら、ずっと)」だ。
良く分からないのはforever ifだ。

ブロックは上下に他のブロックを接続する事で上から下に順番に実行されるようになる。
repeat [n]のブロックはそのブロックの内側のブロックをn回実行し終えると、その下に接続されたブロックが実行される。まあ普通の事だ。
foreverは文字通り永久に繰り返されるようで、終わらない。
そのためだろう、foreverブロックの下には別のブロックは接続できないようになっている。

forever if ~(もし~ならずっと)は、条件が成り立っていればその間続けられる、のかと思ったら、違うようだ。
永遠に「もし~だったら…」というのを実行し続けるということらしい。
言われてみれば「forever if~」なら「if~」を永遠に続けるって事かなと思う。
だけど日本語判の「もし~ならずっと...」はやっぱりちょっと変じゃないかな。
初めにこの文を見た時には、一度だけ条件をチェックして、それが成りたっていれば後は永遠に繰り返し処理なのかと思った。

「forever if [x = 1] ...」は、疑似コード風に書くと

forever {
if (x == 1) { ... }
}

となる。xが1ならば内容を実行するが、そうでなくなれば実行しなくなる。しかしまたxが1になったら実行する。Scratchでは色々なキャラ(スプライト)や背景のスクリプト辺が同時並列で動いているようで、別のスプライトなどが状態を変えるとそれに反応するということのようだ。
しかし日本語版の表記からはそういう内容を想像できなかった。
子供に使ってもらいたいものという事を考えると直した方が良いのではと思った。

ただ僕は時々自分でも自分の日本語感覚は変なのかもと思う事があるので自信なかったり...

1 件のコメント:

abee さんのコメント...

ご無沙汰しています。ご指摘に気づくのが遅くなり申し訳ありません。
この件、たとえば「もし~の間はずっと...」ではどうでしょうか。
しかし、この場合でも「間」を外れたときはループから抜けるような印象があります。ただ、「ずっと」が「もし」に係るような良い訳を思いつきません。
「ずっと、もし~の間 ...」のようにひっくり返すとよいように思えますが、日本語の座りが今ひとつのようにも感じます。「もし」を取って、「ずっと、~の間 ...」もありでしょうか。
そもそもこのブロック自体があまりよくないので、これを使わずにforeverとifに分けて書くべきのような気もしてきました。