ActionScript 3.0で始めるオブジェクト指向スクリプティング

第21回 プロパティのようにアクセスするメソッド - get/setアクセサメソッド

この記事を読むのに必要な時間:およそ 3 分

前回の第20回はクラスMyTimerに修正を加えて,public属性のメソッドgetElapsedTime()がMyTimerInfoインスタンスを返すようにした(前回のサンプルファイルは,2ページからダウンロードできる)。MyTimerInfoクラスには時分秒ミリ秒をそれぞれ納めるint型のインスタンスプロパティが宣言され,数値でなければ設定できない図1)。これらのプロパティを,もっときめ細かく管理できないだろうか。これが今回のテーマである。

図1 int型のプロパティに文字列を設定するとコンパイルエラーになる

図1 int型のプロパティに文字列を設定するとコンパイルエラーになる

プロパティを設定するメソッドの定義

たとえば,MyTimerInfoインスタンスのsecondsプロパティに,整数150を代入してみよう。データ型は正しいので,そのまま150が設定される図2)。しかし,時間は60秒につき1分繰上がるのだから,できればminutesプロパティに120秒分の2分が加算され,secondsプロパティは30になってほしい。

図2 60秒以上の値をプロパティsecondsに設定してもminutesに繰上がらない

図2 60秒以上の値をプロパティsecondsに設定してもminutesに繰上がらない

プロパティ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)。

図3 プロパティsecondsに設定した値は60秒ごとに1分がminutesに繰上がる

図3 プロパティsecondsに設定した値は60秒ごとに1分がminutesに繰上がる

著者プロフィール

野中文雄(のなかふみお)

ソフトウェアトレーナー,テクニカルライター,オーサリングエンジニア。上智大学法学部卒,慶応義塾大学大学院経営管理研究科修士課程修了(MBA)。独立系パソコン販売会社で,総務・人事,企画,外資系企業担当営業などに携わる。その後,マルチメディアコンテンツ制作会社に転職。ソフトウェアトレーニング,コンテンツ制作などの業務を担当する。2001年11月に独立。Web制作者に向けた情報発信プロジェクトF-siteにも参加する。株式会社ロクナナ取締役(非常勤)。

URLhttp://www.FumioNonaka.com/

著書

コメント

コメントの記入