PlayList örneği, şarkı listesini yöneten bir müzik çalma listesi uygulaması bağlamında dizilerle çalışma tekniklerini gösterir. Bu teknikler şunlardır:
-
Dizinlenmiş bir dizi oluşturma
-
Dizinlenmiş bir diziye öğeler ekleme
-
Farklı sıralama seçeneklerini kullanarak nesne dizisini farklı özelliklerine göre sıralama
-
Bir diziyi karakter sınırlı bir dizeye dönüştürme
Bu örneğin uygulama dosyalarını edinmek için bkz.
www.adobe.com/go/learn_programmingAS3samples_flash_tr
. PlayList uygulama dosyası, Samples/PlayList klasöründe bulunabilir. Uygulama aşağıdaki dosyaları içerir:
File
|
Açıklama
|
PlayList.mxml
veya
PlayList.fla
|
Flash (FLA) veya Flex (MXML) içindeki ana uygulama dosyası.
|
com/example/programmingas3/playlist/PlayList.as
|
Bir şarkı listesini temsil eden sınıf. Listeyi saklamak için bir Array kullanır ve listenin öğelerinin sıralamasını yönetir.
|
com/example/programmingas3/playlist/Song.as
|
Tek bir şarkı hakkındaki bilgileri temsil eden bir değer nesnesi. PlayList sınıfı tarafından yönetilen öğeler Song örnekleridir.
|
com/example/programmingas3/playlist/SortProperty.as
|
Kullanılabilir değerleri, Song nesnelerinin listesinin sıralanmasında ölçüt olarak kullanılabilen Song sınıfının özelliklerini temsil eden sahte numaralandırma.
|
PlayList sınıfına genel bakış
PlayList sınıfı, Song nesnelerinin kümesini yönetir. Oynatma listesine şarkı ekleme (
addSong()
yöntemi) ve listedeki şarkıları sıralama (
sortList()
yöntemi) işlevleriyle genel yöntemler içerir. Ayrıca sınıf, oynatma listesindeki gerçek şarkı kümesine erişilmesini sağlayan salt okunur bir erişimci özelliği (
songList
) içerir. Dahili olarak, PlayList sınıfı özel bir Array değişkenini kullanarak şarkılarını izler:
public class PlayList
{
private var _songs:Array;
private var _currentSort:SortProperty = null;
private var _needToSort:Boolean = false;
...
}
PlayList sınıfı tarafından şarkı listesini izlemek üzere kullanılan
_songs
Array değişkenine ek olarak, başka iki özel değişken de listenin sıralanması gerekip gerekmediğini (
_needToSort
) ve şarkı listesinin belirli bir zamanda hangi özelliğe göre sıralandığını (
_currentSort
) izler.
Tüm nesnelerde olduğu gibi, Array örneğinin bildirilmesi, Array oluşturulması işleminin yalnızca yarısıdır. Bir Array örneğinin özelliklerine veya yöntemlerine erişilmeden önce, PlayList sınıfının yapıcısında Array örneğinin başlatılması gerekir.
public function PlayList()
{
this._songs = new Array();
// Set the initial sorting.
this.sortList(SortProperty.TITLE);
}
Yapıcının ilk satırı, kullanıma hazır olması için
_songs
değişkenini başlatır. Ayrıca, ilk sıralama özelliğini ayarlamak için
sortList()
yöntemi çağrılır.
Listeye şarkı ekleme
Kullanıcı uygulamaya yeni bir şarkı girdiğinde, veri girişi formundaki kod, PlayList sınıfının
addSong()
yöntemini çağırır.
/**
* Adds a song to the playlist.
*/
public function addSong(song:Song):void
{
this._songs.push(song);
this._needToSort = true;
}
addSong()
içinde,
_songs
dizisinin
push()
yöntemi çağrılır ve böylece
addSong()
öğesine iletilen Song nesnesi o diziye yeni bir öğe olarak eklenir.
push()
yöntemiyle, önceden uygulanmış olabilecek herhangi bir sıralama dikkate alınmaksızın, yeni öğe dizinin sonuna eklenir. Başka bir deyişle,
push()
yöntemi çağrıldıktan sonra, şarkı listesi artık doğru şekilde sıralanmaz, bu nedenle
_needToSort
değişkeni
true
değerine ayarlanır. Teoride,
sortList()
yöntemi hemen çağrılabilir, böylece listenin belirli bir zamanda sıralanıp sıralanmadığını izleme gereği ortadan kalkar. Pratikteyse, alınmadan hemen önce şarkı listesinin sıralanması gerekmez. Sıralama işlemi ertelendiğinde, uygulama gereksiz olan sıralama işlemini (örneğin, alınmadan önce listeye birçok şarkı eklendiğinde) gerçekleştirmez.
Şarkı listesini sıralama
Oynatma listesi tarafından yönetilen Song örnekleri karmaşık nesneler olduğundan, uygulama kullanıcıları, şarkı başlığı veya yayınlama yılı gibi farklı özelliklere göre oynatma listesini sıralamak isteyebilir. PlayList uygulamasında, şarkı listesini sıralama görevi üç bölüm içerir: listenin sıralanma ölçütü olan özelliği tanımlama, bu özelliğe göre sıralama yapılırken hangi sıralama seçeneklerinin kullanılması gerektiğini belirtme ve gerçek sıralama işlemini gerçekleştirme.
Sıralama özellikleri
Song nesnesi, şarkı başlığı, sanatçı, yayınlama yılı, dosya adı ve kullanıcı tarafından seçilen, şarkının ait olduğu bir tür kümesi gibi birçok özelliği izler. Bunlar arasından yalnızca ilk üçü sıralama için pratik ölçütlerdir. Geliştiriciler için kolaylık sağlaması açısından örnek, sıralama için kullanılabilir özellikleri temsil eden değerlerle numaralandırma olarak hareket eden SortProperty sınıfını içerir.
public static const TITLE:SortProperty = new SortProperty("title");
public static const ARTIST:SortProperty = new SortProperty("artist");
public static const YEAR:SortProperty = new SortProperty("year");
SortProperty sınıfı üç sabit içerir:
TITLE
,
ARTIST
ve
YEAR
; bunların her biri sıralama için kullanılabilen ilişkilendirilmiş Song sınıfı özelliğinin gerçek adını içeren bir String öğesini sağlar. Kodun geri kalanında, her sıralama özelliği belirtildiğinde, bu işlem numaralandırma üyesi kullanılarak yapılır. Örneğin, PlayList yapıcısında, aşağıdaki gibi başlangıçta
sortList()
yöntemi çağrılarak liste sıralanır:
// Set the initial sorting.
this.sortList(SortProperty.TITLE);
Sıralama özelliği
SortProperty.TITLE
olarak belirtildiğinden, şarkılar başlığa göre sıralanır.
Özelliğe göre sıralama ve sıralama seçeneklerini belirtme
Şarkı listesini gerçekten sıralama çalışması, aşağıdaki gibi,
sortList()
yöntemindeki PlayList sınıfı tarafından gerçekleştirilir:
/**
* Sorts the list of songs according to the specified property.
*/
public function sortList(sortProperty:SortProperty):void
{
...
var sortOptions:uint;
switch (sortProperty)
{
case SortProperty.TITLE:
sortOptions = Array.CASEINSENSITIVE;
break;
case SortProperty.ARTIST:
sortOptions = Array.CASEINSENSITIVE;
break;
case SortProperty.YEAR:
sortOptions = Array.NUMERIC;
break;
}
// Perform the actual sorting of the data.
this._songs.sortOn(sortProperty.propertyName, sortOptions);
// Save the current sort property.
this._currentSort = sortProperty;
// Record that the list is sorted.
this._needToSort = false;
}
Başlığa veya sanatçıya göre sıralama yapılırken sıralamanın alfabetik olması akıllıcayken, yıla göre sıralama yapılırken sayısal sıralama yapılması akıllıcadır.
switch
deyimi,
sortProperty
parametresinde belirtilen değere göre
sortOptions
değişkeninde saklanan uygun sıralama seçeneğini tanımlamak için kullanılır. Burada da, sabit değerler yerine özellikleri birbirinden ayırmak için adlandırılmış numaralandırma üyeleri kullanılır.
Sıralama özelliği ve sıralama seçenekleri belirlenmiş durumdayken,
sortOn()
yöntemi çağrılıp bu iki değerin parametre olarak iletilmesiyle
_songs
dizisi gerçekten sıralanır. Şarkı listesi geçerli olarak sıralandığı gibi geçerli sıralama özelliği kaydedilir.
Dizi öğelerini karakter sınırlı bir dizeye birleştirme
Dizilerin, şarkı listesini PlayList sınıfında tutmak için kullanılmasına ek olarak, bu örnekte, belirli bir şarkının ait olduğu tür listesinin yönetilmesine yardımcı olmak için de Song sınıfında diziler kullanılır. Song sınıfının tanımındaki bu kod parçasını göz önünde bulundurun:
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(";");
}
Yeni bir Song örneği oluşturulurken, şarkının ait olduğu türü (veya türleri) belirtmek için kullanılan
genres
parametresi, bir Array örneği olarak tanımlanır. Böylece, birden çok türün yapıcıya iletilebilen tek bir değişken şeklinde gruplanması yararlı hale gelir. Ancak, dahili olarak Song sınıfı, özel
_genres
değişkenindeki türleri noktalı virgülle ayrılmış bir String örneği olarak tutar. Belirtilen sınırlayıcı olarak
";"
değişmez dize değeriyle
join()
yöntemi çağrılarak, Array parametresi noktalı virgülle ayrılmış bir dizeye dönüştürülür.
Aynı işaretle,
genres
erişimcileri, türlerin Array olarak ayarlanmasına veya alınmasına olanak sağlar:
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
erişimcileri yapıcıyla tamamen aynı şekilde hareket eder; bir Array öğesini kabul eder ve bunu noktalı virgülle ayrılmış bir String öğesine dönüştürmek için
join()
yöntemini çağırır.
get
erişimcisi tam tersi işlemi gerçekleştirir:
_genres
değişkeninin
split()
yöntemi çağrılır, böylece String öğesi, belirtilen sınırlayıcı (daha önceki gibi
";"
değişmez dize değeri) kullanılarak değerler dizesine ayrılır.
|
|
|