ActionScript 3.0で始めるオブジェクト指向スクリプティング
第21回 プロパティのようにアクセスするメソッド - get/setアクセサメソッド
前回の第20回はクラスMyTimerに修正を加えて,public属性のメソッドgetElapsedTime()がMyTimerInfoインスタンスを返すようにした(前回のサンプルファイルは,2ページからダウンロードできる)。MyTimerInfoクラスには時分秒ミリ秒をそれぞれ納めるint型のインスタンスプロパティが宣言され,数値でなければ設定できない(図1)。これらのプロパティを,もっときめ細かく管理できないだろうか。これが今回のテーマである。
プロパティを設定するメソッドの定義
たとえば,MyTimerInfoインスタンスのsecondsプロパティに,整数150を代入してみよう。データ型は正しいので,そのまま150が設定される(図2)。しかし,時間は60秒につき1分繰上がるのだから,できればminutesプロパティに120秒分の2分が加算され,secondsプロパティは30になってほしい。
プロパティsecondsの値をminutesに繰上げるには,設定のためのメソッドをMyTimerInfoクラスに用意することが考えられる。secondsプロパティを設定するメソッドは,クラス MyTimerInfo(前回のスクリプト2)にたとえばsetSeconds()としてつぎのように定義すればよい(他のプロパティは一旦脇に置く)。
// ActionScript 3.0クラス定義ファイル: MyTimerInfo.as
package {
public class MyTimerInfo {
public var milliseconds:int;
public var seconds:int;
public var minutes:int;
public var hours:int;
public function MyTimerInfo(nMilliseconds:Number=0) {
setTime(nMilliseconds);
}
public function setSeconds(nSeconds:Number) { // 追加
setTime(nSeconds*1000);
}
private function setTime(nTime:Number):void {
milliseconds = nTime % 1000;
nTime = Math.floor(nTime / 1000);
seconds = nTime % 60;
nTime = Math.floor(nTime / 60);
minutes = nTime % 60;
hours = Math.floor(nTime / 60);
}
}
}
MyTimerInfoインスタンス(oElapsedTime)に対して,このsetSeconds()により設定値の秒数を渡せば,60秒ごとに1分がminutesプロパティに繰上がる。たとえば,setSeconds()メソッドの引数に150秒を渡せば,プロパティminutesに2分が,secondsに30秒が設定される(図3)。


