さあ、いよいよ数字ボタンを作っていきましょう。
電卓の数字を押すとどうなるのかってきちんと考えたことある人は、なかなかいないんじゃないかと思います。
0はちょっと複雑なので、1で考えてみましょう。
画面に0と表示されている初期状態で1を押すと「1」になりますね。
当たり前ですが大事なことなのでしっかり頭に入れてくださいね。
ここで、もう一回1を押すと「11」になります。
1を2回押すと11になる。3回押すと111になる。
これを式で表さないといけません。
位をあげていけばいいのかな?
と考えてしまうと間違いです。
1があって、もう一回1を押したら10足されて(10倍?)、もう一回押したら100足される(100倍?)。
押された回数をnとして、
「10^n(10のn乗)」+「表示されている今の数字」
1だけで考えると論理的にはあってるように見えます。
ですが、違う数字を押したときに変わるのは1の位です。
電卓で1と2と3を順に押したら表示されるのは「123」ですよね?
これに合う式は・・・。
(「表示されている今の数字」×10)+「今押された数字」
表示されている数字をA2セルとして、押される数字をnとすると・・・
=(A2*10)+n
数字の1ボタンなので、n=1ですね。
これをコードで書いてみましょう。
function button1() {
sheet.getRange(“A2”).setValue(A2*10+1);
}
で、1のボタンを押してみる。
何も起きませんね・・・。
そうだ。設定していない。
クリアボタンの時と同じことを1ボタンにもしないといけません。
「1」のボタンを選択状態にして右上の方にある、縦に並んだ「・・・」のとこをクリックしましょう。
その選択肢の「スクリプトを割り当て・・・」を選びbutton1にしましょう。
これで、「1」ボタンを押したら電卓の1ボタンを連打するのと同じことが出来るようになりました。
クリアボタンと繰り返し押してみて、思った通りの挙動しているか確認してみましょう。
同様に他の数字ボタンもコードを書いて、設定を付けていってみましょう。
例えば上にも書いた1と2と3を順に押したら「123」が出ましたか?
出なければどこか間違っているので、探し出して直しましょう。
0にも同じ式で大丈夫なのですが、0を連打しても0のままなので1で説明を始めました。
123に0を押したら「1230」になりますよね?
とりあえずやりたいことは出来た感じがしますが、ここで問題です。
この電卓、作ったとして自分だけが触るものとも限らない。
会社で言えば、誰がどんなアクションするのか分からないことにも対応する必要があります。
ゲームで言えばバグを探すデバッグという行為ですね。
もしもA2セルの数字が消されてしまっていたら?
もしもA2セルに文字列が入っていたら?
空白や文字列に10をかけることが出来ないので、エラーになってしまいますね。
どうやってこれを防ぎましょうか?
次回までに考えてみましょう。
コメント