2011-01-11 20 views
14

Scala'da paket özel (Java'da varsayılan) olmadığı ve varsayılan olarak herkese açık erişimi kullandığını okudum.Varsayılan toplu erişim scala

Bu seçimin gerekçesi nedir? Varsayılan herkese açık erişim her şeyi görünür kılan, dolayısıyla API'nın bir parçası olarak iyi bir uygulamadır mı?

Bu alanlar ve yöntemler saklanması için ekstra yazarak demektir

(gizli olmasını ister özel, korumalı erişim kapsamlı).

cevap

2

Bu, birçok insana bazı sıkıntı veren bir şeydir. this girişini (aslında dizinin tamamını) okumanızı öneririm.

Kesilebilirlik ayrıca, genel olarak böyle bir erişimde gerçekleşen eğlencenin herhangi birini de engeller. "Daha fazla yazım var", ancak IDE'lere bakmak doğru olabilir, IDE tarafından üretilen herhangi bir yöntem genellikle kamuya açık olduğundan, her zaman geçerli olmayan çok sayıda çamurdan sorumludurlar.

1

Programming Scala göre, varsayılan halka gibi görünüyor aşırı operatör biri 'paketi-özel' gibi seçim için çok daha kolay Java'da field = newvalue

+0

iyi .. aslında derleyici üniforma erişim için bir alıcı eklemek ki (http://joelabrahamsson.com/entry/learning-scala-uniform-access-principle) burada okuyun.Ancak erişimcinin halka açık olması – bsr

+0

Tekdüzen erişim ilkesi için, alanlar ve yöntemler için varsayılan erişim düzeylerinin eşit olması, her ikisinin de 'public' olması gerekmez. –

25

olarak tutucuyu tanımlamak için izin uniform access principle, kaynaklanmaktadır varsayılan olarak sadece üç olasılıktan biri olduğu için.

Scala size kamu erişimine (public) miras (protected[C]), miras olmadan paket özel erişim (private[C]), sınıf-özel erişim (private), nesne-özel erişim ile, paket-özel erişim (private[this] arasında seçim yapabilirsiniz), devralma erişimi (protected), protected[this] erişim (buna her ne diyorsunuz) ve ek olarak, bir çeşit dosyaya özel erişim değiştiriciniz (sealed).

O public dışında başka bir varsayılan seçmek zor.

,

+1

Geçerli bir noktaya yükselttiniz, yine de diyelim ki, scala daha iyi ve daha iyi (korumalı kapsamda tutarlılık) seçim yapsa da, varsayılan, uygulamayı gizleyen bir şey olmalıdır. Bu anlamda, ifadenizde mirassız paket özel erişim (private [C]). Fazladan yazmayı umursamıyorum ve IDE ile bunun daha kolay olduğunu ve seçimin daha mantıklı olduğunu düşünüyorum. – bsr

+0

Ama sonra ne zaman özel ihtiyacın olacak [C] '? Ve ayrıca, paketleri yuvalayabileceğinizden, hangi paketin veya sınıfın "C" olacağı? En dışta işe yaramaz olurdu, en içteki üye tanımlanmış sınıf olurdu, bu yüzden sadece 'özel' olurdu. Hala geçerli bir kurs seçeneği; Özellikle zor olan paket şey. – Debilski

+0

Ama yine de, bunu tartışmak zordur çünkü bu sadece bu şekilde olur ve göründüğü kadar kötü değildir. – Debilski

5

Scala Java daha bir şey görünürlüğünü seçiminde çok fazla esnekliğe sahiptir (iç yöntemler, bir de ... listeye yöntem-özel ekleyebilir düşünüldüğünde) Java görünürlük bazı kuralları, ilgili olsa iç içe geçmiş sınıflar Scala'ya çevrilemez.

Ve evet, Scala'da özel paket var. Scala'da private[package] olarak yazılmıştır. kullanılan en yaygın görüş olduğu için

Scala public varsayılan yapar nedeni budur. "Ek yazım" aslında daha az yazarak, üyelerin özel veya korunmasını sağlamak için çok daha nadir olduğundan yazıyor. Java o kurala

Bir istisna biri müşterilerine bozmadan uygulama ayrıntılarını değiştirmek mümkün olabilir bu yüzden herkese açık olmamalıdır alanları vardır. Bunun pratik bir sonucu, alanların olduğu sınıflar ve her alan için alıcılar ve ayarlayıcılardır.

Scala'da, bir val veya var'u ilgili def ile değiştirebileceğinden, buna gerek yoktur.

+0

'Üyeleri özel veya korumalı yapmak çok daha nadirdir getters ve/veya setter nitelikleri için doğru olabilir, ancak genel durumda katılmıyorum. API daha yüksek düzeyli yöntemler ortaya çıkardığından, genel API'den çok daha fazla özel uygulama ayrıntıları vardır. – Dici

İlgili konular