メンバ変数とメソッドについてはもうだいたい解ったよね? | |
うん! | |
というワケで、今回は §1.20 のスクリプトをベースにして、Clock クラスを作ってみて。 | |
あの4つの関数を Clock クラスのメソッドにすればいいの? | |
ん〜、後々の事を考えると、変えといた方がいい関数もあるね。 | |
どれを変えるの? | |
えっとね…こんな感じかな。 |
<Clock クラスのメソッド>
引数……なし |
動作……入力を求めるウィンドウを表示して、OK ボタンが押された場合はアラームの時刻をセットします。キャンセルボタンが押された場合は何もしません。不正な値が入力された場合は再度入力を求めます。 |
戻り値…OK ボタンが押された場合は true、キャンセルボタンが押された場合は false を返します。 |
引数……minute(数値) |
動作……アラームを鳴らす時刻を今から minute 分後にセットします。 |
戻り値…なし |
引数……なし |
動作……現在時刻を返します。 |
戻り値…現在の時・分・秒を要素に持つ辞書配列を返します。 |
引数……なし |
動作……アラームを鳴らす時刻を返します。 |
戻り値…アラームがセットされていれば、アラームを鳴らす時・分・秒を要素に持つ辞書配列を返します。アラームがセットされていない場合は void を返します。 |
引数……なし |
動作……アラームを解除します。 |
戻り値…なし |
なんか数が増えてるんだけど… | |
時刻を返すメソッドが欲しかったからちょっと追加してみたんだ。 | |
しかも戻り値が辞書配列ってのもあるし… | |
あー、辞書配列を返すのは簡単だからだいじょぶだよ。 | |
そうなの? | |
うん。関数自体もそんなに複雑じゃないしね。 じゃあ次はメンバ変数を決めとこうか。 Clock クラスのメンバ変数はこの4つね。 |
<Clock クラスのメンバ変数>
データ型…整数型(真または偽) |
表す状態…true ならアラームがセットされていることを表し、false ならアラームがセットされていないことを表します。 |
初期値……偽(false) |
データ型…整数型 |
表す状態…アラームを鳴らす時刻(時)を表します。 |
初期値……void(初期化の必要なし) |
データ型…整数型 |
表す状態…アラームを鳴らす時刻(分)を表します。 |
初期値……void(初期化の必要なし) |
データ型…整数型 |
表す状態…アラームを鳴らす時刻(秒)を表します。 |
初期値……void(初期化の必要なし) |
メンバ変数はわかりやすいね。 | |
でしょ。 じゃあ、後はコンストラクタとデストラクタね。 |
<Clock クラスのコンストラクタとデストラクタ>
引数…なし |
動作…メンバ変数 alarm_on を偽(false)に初期化します。 |
動作…何もしません。 |
これも解るよね? | |
うん、OK だよ。 | |
それじゃ、まずはコンストラクタとデストラクタから作っていこっか。 | |
これは簡単だね。 | |
じゃ作ってみて。 | |
コンストラクタで alarm_on を false に初期化して、 デストラクタでは何もしなくていいんだから、こうだよね。 |
<Clock クラスのコンストラクタとデストラクタ>
ん、これで OK だね。 じゃあ次は getTime メソッドを作ってみて。 |
|
getTime メソッドって、今回追加するメソッドだよね? | |
そ。現在時刻を辞書配列の形で返すメソッドだよ。 | |
辞書配列を返すのって、どうやってやるの? | |
こんな感じにすればいいよ。 |
<辞書配列を返す関数の例>
%[...] って、§1.15 で辞書配列を初期化する時に使った書き方だよね? | |
うん。それを return の後に書けば辞書配列を返せるよ。 あと、戻り値を代入した変数は普通に辞書配列として使えるから。 |
|
なるほどね。 じゃあ、getTime メソッドは… |
<getTime メソッド>
これでいいんじゃないかな? | |
ん、これでもいいんだけど、もっと簡単にこう書けるよ。 |
<getTime メソッド(改)>
そっか。Date クラスのメソッドの戻り値を直接辞書配列の要素に代入してもいいんだね。 | |
うん。 じゃ次は setAlarmTime メソッドね。 |
|
setAlarmTime メソッドって calculateTime 関数を変更して作るんだよね? | |
そうそう。calculateTime 関数は値を返してたけど、 setAlarmTime メソッドは値を返さずに、計算結果をメンバ変数にセットするの。 | |
じゃあ、calculateTime 関数の hour と minute を alarm_hour と alarm_min に置き換えればいいってこと…? | |
ん、そうなるね。 | |
秒はどうすればいいの? | |
秒は現在時刻、つまり getSeconds メソッドの戻り値でいいよ。 あと、アラームがセットされてるかどうかを表す alarm_on を true にするのを忘れないでね。 |
|
うん、わかった。 じゃ、やってみるね。 |
<setAlarmTime メソッド>
こんな感じでどうかな? | |
んー、せっかく getTime メソッドを作ったわけだから、 現在時刻は getTime メソッドを使って取得するようにしてみよっか。 | |
あ、そっか。 え〜っと、getTime メソッドは現在時刻を辞書配列で返すんだったよね。 戻り値は普通の辞書配列として使えるから… |
<setAlarmTime メソッド(改)>
これでいいのかな? | |
うん、OK。 じゃ今度は getAlarmTime メソッドを作ってみて。 |
|
getAlarmTime メソッドも getTime メソッドと同じように時刻を辞書配列で返すんだよね? | |
うん。要素の名前も同じでいいよ。 あとアラームがセットされてない場合は void を返してね。 |
|
アラームがセットされてない場合って、alarm_on が false の場合ってこと? | |
ん、そう。 | |
わかった。 えっと、今度はメンバ変数の値を辞書配列の要素に代入すればいいんだから… |
<getAlarmTime メソッド>
これでいいんじゃないかな。 | |
ん、完璧だね。 | |
でしょ〜。これはちょっと自信あったんだ。 | |
じゃあ、次は setAlarm メソッドいってみよっか。 | |
setAlarm メソッドって getInput 関数がベースになるんだよね? | |
うん。 OK が押された場合はアラームをセットするってのと、戻り値が true か false になるってのが変更点だね。 |
|
アラームをセットするのは、さっき作った setAlarmTime メソッドを使えばいいんだよね? | |
ん、そう。 | |
じゃ、やってみるね。 |
<setAlarm メソッド>
これでいいと思うんだけど…どうかな? | |
うん、ちゃんとできてるよ。ばっちりだね。 | |
やったぁ! | |
んじゃ最後は cancelAlarm メソッド。 これは簡単だよね。 |
|
アラームを解除するってことは、alarm_on を false にすればいいだけなんだよね? | |
そうそう。 | |
じゃあ… |
<cancelAlarm メソッド>
これでいいんだよね? | |
ん、OK。 | |
あとは、isNumber 関数と toNumber 関数をそのまま Clock クラスの定義に入れればいいんだよね? | |
うん、それで完成だよ。 それじゃ、Clock クラスの定義全体を書いとくね。 |
わぁ、Clock クラスってこんなに長かったんだねぇ… | |
うん、今まで書いてきたスクリプトの中では一番長いよね。 でもまだこれで終わりじゃないよ。今度はオブジェクトを作ってメソッドを実行するスクリプトね。 |
|
そっかぁ、まだそれがあったね。 | |
とりあえず、この2つのスクリプトを書いてみて。 |
うん、わかった。 じゃ、現在時刻を表示する方から書いてみるね。 |
<現在時刻を表示するスクリプト>
ん〜、こんな感じかな。 | |
じゃ実行してみて。 | |
うん。 |
<実行結果>
ちゃんと今の時刻が表示されたね。 | |
ん、OK だね。 じゃあ次はアラームをセットする方ね。 |
|
はーい! |
<アラームをセットして、アラームを鳴らす時刻を表示するスクリプト>
こんな感じでどう? | |
じゃ、実行してみよっか。 | |
うん。 『100』って入力して、OK。 |
<実行結果>
えっと、今は 22 時 15 分で、 100 分後は…23 時 55 分だから合ってるよね。 | |
ん、これも OK だね。 なんか今回は調子いいね〜。 |
|
でしょ〜。 だいぶ解ってきたような気がするんだ〜。 |
|
それじゃ、この先もその調子でがんばってね! | |
うん、りょーかい! | |
それじゃ、今回はここまで。 また次回ね! |