※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

setter、getter、ディフォルト値


さて、ようやっとできたScoreクラスだけど。何気に使いにくい部分があるよね。

var score : Score = new Score( 9999 );

みたいに毎回上限決めなきゃなんないとことか、スコアの更新時に

score.setScore( score.getScore()+300 );

みたいに書かなきゃいけないところとか・・・
なんか、毎回単純にプロパティ弄るほうが楽だったんじゃ・・・って気もしてくる。

そんなときには、setter / getter や、ディフォルト値ってものを使えば、クラスで関数にアクセスしたり初期化するときの手間を一気に軽減できたりするよ。

ディフォルト値


ディフォルト値ってのは、関数を呼び出すときに引数を省略できる仕組み。
省略した場合に、代わりにディフォルトの値を渡してやる仕組みのこと。

例えばScoreクラスは初期化の関数Scoreで毎回スコアの上限を決めていたけど、ディフォルト値を書いてしまえば、もうクラス作成時に毎回上限を決めなくても済むようになる。

public function Score( maxScore : Number = 9999);

関数( 引数名 : 型 = ディフォルト値 )

という風に、引数宣言の後ろにイコール初期値を書いてしまえば、省略時にはその値で引数が渡されることになる。
また下記のように、複数の引数にディフォルト値を渡すことも可能。

myFunction( hoge1:Number = 9999, hoge2 : Number = 1300);

1つだけ注意しなければならないのは、1つの関数にディフォルト値のある引数と、ディフォルト値のない引数が混在する場合。
この場合、ディフォルト値のない引数が、必ず手前にこなければならない。 

myFunction( hoge:Number, hoge2:Number = 999 );

みたいに。

setter / getter


クラスを使いやすくする、もう1つの便利機能はgetter と setter。
getter/setter は「プロパティのフリ」をした関数を作る機能。

public function set score( value:Number ):void{ 
	setScore(value);
}

public function get score():Number{ 
	return getScore(value);
} 

みたいに、 set, get ってのがついた関数scoreを宣言すると、

var myScore : Score = new Score();
myScore.score = myScore.score + 1

みたいに、関数scoreがプロパティとして使えるようになる!
値を設定するときにはset, 値を取得するときには get のほうが呼ばれることになる。

これで、普通に値が設定できるのに、自動でハイスコアの判定もしてくれるプロパティが作れるよ。

setter/getterの書き方


さてプロパティへの値の読み書きを、関数に転送してくれる
setter/getterの書き方は以下の通り。

public function set プロパティ名( 値 : 型) : void 
public function get プロパティ名() : 型 

setter / getter 両方用意するのが基本だけど、
片方だけしか作らなければ、読み込み専用、書き込み専用のプロパティが作れる。
totalFramesとか、bytesLoadedとかがちょうどそんな感じだよね。

いい忘れてたけど、最後についてる型は、値を返す場合に帰ってくる値の型を書く場所。
setの方は、値を返さないのでvoid。
getの方には、返す値の型を書いてやる。

プロパティの変更と同時に、色々な処理が行える。

値が変わった瞬間に表示をアップデートとか、イベントを発行とか、いままで値を変える→update()みたいのを呼ぶ、みたいにやってたことが一発でできるようになる。
必ずセットで実行されれば、呼び忘れもなくなるし便利。

読み込み専用、書き込み専用の変数が作れる。

上に書いたように、書き込み専用、読み込み専用の変数が作れるといいことがある。
それは事故が減るってこと。

プロパティに、特殊な処理を連動させたいとき(この場合ハイスコア計算)をしたいときは、setter / getter を使えばOKって感じ。
ほんとは細かいことも色々あるけど、まぁ大まかそんな感じ。