SORU
15 HAZİRAN 2014, Pazar


Neden Sınıf Üzerinde Yapı Seçmelisiniz?

Bir Java arka plandan Swift, önümüzdeki uğraşırken, neden bir Sınıf yerine bir Yapı tercih etmek istiyorsunuz? Aynı şey gibi, bir Yapı sunan daha az işlevsellik. O zaman neden bunu seçtin?

CEVAP
15 HAZİRAN 2014, Pazar


Çok popüler WWDC 2015 konuşmaya göre Protocol Oriented Programming in Swift, Swift yapılar birçok durumda sınıfları daha iyi hale getiren bir dizi özellik sağlar.

Yapılar ise nispeten küçük olmaları durumunda tercih edilir ve kopyalanıyor olduğu gibi aynı örnek için birden fazla başvuru olması daha güvenli olur çünkü copiable. Bu pek çok sınıf ve ya birden çok iş parçacığı bir ortamda/bir değişken geçirmeden çevresinde özellikle önemlidir. Eğer her zaman diğer yerler için değişken bir kopyasını göndermek ve eğer, bunu asla başka yerin altında senin değişkenin değerini değiştirme hakkında endişelenmenize gerek.

Yapılar ile bellek sızıntısı veya birden çok iş parçacığı bir değişken tek bir örneğini değiştir/erişim yarış hakkında endişelenmenize gerek yok.

Sınıflar da bir sınıf sadece tek bir üst sınıftan miras çünkü şişmiş olabilir. Bu bize büyük superclasses sadece gevşek ilgili birçok farklı yetenekleri kapsayacak yarattığı için teşvik eder. Protokollerini kullanarak, özellikle protokolleri uygulamaları sağlamak nerede protokol uzantıları ile, sınıflar bu tür davranışlar elde etmek için ortadan kaldırır.

Konuşma sınıfları tercih olduğu bu senaryoları ortaya koyuyor:

  • Veya örneklerini kopyalama karşılaştırarak anlamda (örneğin Pencere) yapmaz
  • Örneği ömür boyu dış etkenlere (örneğin, TemporaryFile) gelgit
  • Örnekleri sadece "lavabo"--yazma-sadece dış devlet kanallarına (e.g.CGContext)

Yapılar varsayılan olmalıdır ve sınıfları bir geri dönüş olması gerektiğini ima ediyor.

Diğer taraftan, The Swift Programming Language Dokümantasyon çelişki:

Yapı örnekleri, her zaman değer ve sınıf geçirilir örneklerini her zaman başvuruya göre iletilir. Bu olduğu anlamına gelir farklı türde bir görev için uygundur. Veri düşünürken oluşturur ve bir proje için gereken işlevsellik, karar her bir veri olarak bir sınıf olarak tanımlanmalıdır inşa olsun yapısı.

Genel bir kural olarak, bir yapı oluşturmayı düşünün veya daha fazla bu koşullar geçerlidir:

  • Yapı birincil amacı oldukça basit birkaç veri değerleri saklanması için.
  • Kapsüllenmiş değerleri atamak yerine, kopyalanan referans olmasını bekliyorlar ya geçmek mantıklı olur bu yapı örneği.
  • Tüm özellikleri yapı tarafından saklanır kendileri de kopyalanan yerine başvurulacak olması beklenen değer türleri.
  • Yapı özellikleri devralır veya davranış varolan başka bir tür gerekmez.

Yapılar için iyi adaylar şunlar:

  • Tip Çift hem de geometrik bir şekil ve belki de bir özellik genişlik ve yükseklik özelliği dışı bir boyutu.
  • Bir dizi aralıklar, belki de bir başlangıç özelliği şifrelenmiş başvurmak için bir yol ve uzunluğu bir özellik, İnt.
  • Bir 3D bir puan sistemi, belki de x, y ve z özelliklerini bir ortamda yazın her Çift koordinat.

Tüm diğer durumlarda, bir sınıf tanımlamak ve bu sınıfın örneklerini oluşturmak yönetilecek ve başvuruyla geçirildi. Uygulamada, bu demektir en özel veri yapıları, sınıflar, yapılar olmalıdır.

Burada sınıfları kullanarak varsayılan ve belirli şartlar altında sadece yapıları kullanmamız gerektiği iddia edilmektedir. Sonuçta, gerçek bir değeri dünya ima anlamak için ihtiyacınız türleri v. s. referans türleri ve yapılar veya sınıflar kullanma hakkında bilinçli bir karar yapabilirsiniz. Ayrıca bu kavramlar sürekli gelişmektedir unutmayın ve Swift Programlama Dili belgeleri Protokol önce yazıldı Programlama konuş verildi.

Benim kişisel tavsiyem, her zaman varsayılan kullanarak bir yapı, çünkü onlar büyük ölçüde azaltmak karmaşıklığı ve geri dönüş için sınıflar eğer Yapı çok büyük olur ya da gerektirir bazı özelliği olan yapılar ve protokoller sağlayamaz, en önemlisi yeteneğine sahip birden çok değişken referans aynı veri.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Anthony Cumia

    Anthony Cumi

    5 EYLÜL 2006
  • EatingIn

    EatingIn

    12 EKİM 2013
  • Sams Page :D

    Sams Page :D

    15 Mart 2009