Diziler örneği: PlayList

Flash Player 9 ve üstü, Adobe AIR 1.0 ve üstü

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.