Luaレッスン2.5「もっと活き活きと」和訳

原典:

http://compasstech.com.au/TNS_Authoring/Scripting/script_tut2.html

レッスン2.5「もっと活き活きと」

表示する行数をリアルタイムに変更できたらすごいと思いませんか? そう思うのは私だけかもしれませんが、その過程で非常に大切なことが学べますので、少し我慢してください。

今からTI-Nspireドキュメントにスラーダーを追加してみます。まずはページを分割する必要があります。[Page Layout]メニュー(中略)を開いてウィンドウを上下に分割してください。新しいウィンドウにはGeometryを選択してください。

メニューから[Actions>Add slider]の順にクリックし、適当なところにスラーダーを配置して、"lines"という名前をつけます。スライダーを右クリックし、[Slider Settings]で以下のように設定します。
[Variable]:lines
[Value]:5(これはどのような効果があるのでしょうか?)
[Minimum]:1
[Maximum]:10
[Step size]:1
[Style]:Vertical
(訳註:実機(ver 3.9)と少し違う。[Add slider]ではなく[Insert Slider]である。[Insert Slider]を選択すると配置する前にすぐに[Slider Settings]が表示される)

見た目をよくするため、スライダーを右クリックし、スライダーを最小化したうえで縦向きに表示されるようにしてください。 

  1. どうにかしてLuaスクリプトからスライダーの値にアクセスする必要がありますが、それは非常に簡単にできます。var.recallというコマンドを使うだけです。たとえば先のレッスンでは3のような固定値としてローカル変数linecountを定義しましたが、今回はその代わりにlocal linecount = (var.recall("lines") or 1)と設定します。
  2. このスクリプトをよく見てください。var.recall("lines")は、"lines"という名前の既存の変数を探して、その値を取得する働きをします。そうして取得した値がlinecountに割り当てられます。変数linesが定義されていない場合はどうなるのでしょうか? "or 1"とあるように、変数linesが見つからない場合は値1が割り当てられます(1に限らず何でも指定できます)。

先の例ではlinecountがon.paint函数の外側に定義されていましたが、今回は内側に定義されていることにも注意してください。試しにこのコマンド・ラインを切り取ってon.paint函数の外側に貼り付け、違いを確かめてみてください。on.paint函数の内側に配置したときには、スクリプトは意図したとおりに動作します。すなわち、スライダーを動かすたびに変化が生じます。外側に配置した場合は、こうはなりません。スクリプトが最初に実行されたときに1回しか呼び出されないからです。on.paint函数は、何か変化のあるたびに毎回呼び出されますので、何度でも更新されます。 

次は何?

よくできました これでまた一つ、レッスンが終わりました。パラメーターをいろいろ変えて試してみてください。一層理解が進むはずです。各チュートリアルに用意した資料をダウンロードしてください。今回のレッスンで述べたドキュメントの完成版も含まれていますので、簡単に試してみることが可能です。

今回作ったドキュメントはもっと面白くできます。次のレッスンではそれを学びます。"line #1""line #2"などを表示するだけのドキュメントに使い道は多くありませんからね。次回は、文字以外についても各行にリアルタイムに表示する方法を学ぶほか、Ifステートメントを使ってもっと面白い方法で表示する方法を学びます。

---------------------------------------------------

(訳註)今回の実行例:

スライダーは横長に変えた。

f:id:ti-nspire:20140921082716j:plain

f:id:ti-nspire:20140921082738g:plain

(スライダーの目盛りの刻みが何だか変)