配列を使用して曲のリストを PlayList クラスで維持する以外に、この例では Song クラスでも配列を使用して、曲についてのジャンルリストを管理するのに役立てています。 次の例で、Song クラスの定義からこのコードについて考えます。
private var _genres:String;
public function Song(title:String, artist:String, year:uint, filename:String, genres:Array)
{
...
// Genres are passed in as an array
// but stored as a semicolon-separated string.
this._genres = genres.join(";");
}
新しい Song インスタンスの作成時に、曲のジャンルの指定に使用する
genres
パラメーターが Array インスタンスとして定義されます。そのため、複数のジャンルを一緒のグループにまとめ、コンストラクターに渡せる 1 つの変数とするのに便利です。 ただし、内部的には Song クラスは、セミコロンで区切られた String インスタンスとして
_genres
プライベート変数にジャンルを維持します。Array パラメーターは、リテラルストリング値「
;
」を区切り文字として指定して
join()
メソッドを呼び出すと、セミコロンで区切られたストリングに変換されます。
同じように、
genres
アクセッサーを使用して、ジャンルを配列として設定また取得できます。
public function get genres():Array
{
// Genres are stored as a semicolon-separated String,
// so they need to be transformed into an Array to pass them back out.
return this._genres.split(";");
}
public function set genres(value:Array):void
{
// Genres are passed in as an array,
// but stored as a semicolon-separated string.
this._genres = value.join(";");
}
genres
set
アクセッサーの動作は、コンストラクターの動作とまったく同じです。配列を受け取って
join()
メソッドを呼び出し、セミコロン区切りのストリングに変換します。
get
アクセッサーは反対の操作を実行します。つまり、
_genres
変数の
split()
メソッドが呼び出されると、指定された区切り文字(リテラルストリング値
";"
など)を使用して、ストリングを値の配列に分割します。