2012-01-04 14 views
10

Sadece, modeldeki bazı yöntemler için ne zaman private veya protected'u kullanmamız gerektiğini merak etmeliyiz?Özel veya korumalı olarak kullanmayı ne zaman düşünmeliyiz?

Bazen yöntemlerimi private veya protected numaralarında gruplamaktan rahatsız olamıyorum. Sadece olduğu gibi bırakıyorum. Fakat bunun kötü bir uygulama olması gerektiğini biliyorum, aksi halde bu 2 gruplama programlamada oluşturulmayacak.

Teşekkürler.

cevap

15
  • bunu sadece içten kullanılacaksa dahili olarak bunu kullanmayı planlıyorsanız, dıştan sonra "Özel" self.method(),
  • ardından "kamu" record.method(),
  • bir yöntemi çağırmak planlıyorsanız, ancak Ayrıca torunları içinde, self.method() # in subclass ardından
+2

Bu bana biraz kulağa hoş geliyor ... ** 3. noktanız **. Bir alt sınıf, üst sınıfının dahili olarak "özel" yöntemlerine erişebilir. Korumalı yöntem, aynı sınıftaki bir nesneyi iletme ve bu nesne üzerinde korunan yöntemleri çalıştırma yeteneğini verir. – slindsey3000

+0

http://weblog.jamisbuck.org/2007/2/23/method-visibility-in-ruby "Korunan yöntemler, alıcının" kendi kendine "aynı sınıftan olduğu her zaman çağrılabilir" – clyfe

0

Ben özel bir durum olarak Ruby bilmiyorum ama işte o ben, cevap çok diğer diller için aynı olacağını varsayalım:

özel yöntem yalnızca üyeleri tarafından erişilebilir

Aynı sınıf, korunan bir yöntem de, yöntemin beyan edildiği taban sınıfını genişleten sınıfların üyesi için de kullanılabilir.

+0

Yupp, genel bir programlama sorusu. "Özel" ve "korunan" ın ne yaptığını okudum ama ne zaman onu görmezden gelmemeliyiz? – Victor

+0

Bir yöntemin, herkese açık, özel veya korunan olarak bildirilmediği durum mu demek istiyorsunuz? – fkerber

+0

@Victor Kapsaymayı 'göz ardı etmiyorsunuz', ancak genel olarak 'özel' olanların korunması için iyi bir neden olmadığı sürece 'özel' olanları saklamıyorsunuz 'ya da' public ' –

2

benim görüş vereceğiz "korunan" ve belki de bunun için tekme alırsınız ama uğraşmıyor korumalı veya Ruby özel. Gerçek şu ki, Ruby bir yetişkin gibi davranır, eğer sınıfın dışından özel bir yöntem kullanmak istiyorsanız, (areways). Korunan yöntemleri sınıfın dışında çalıştırabilirsiniz. Sabitleri yeniden atayabilirsin ... ... istediğin gibi yapabilirsin, temelde.

Ve bu yüzden bundan hoşlanıyorum, senin sorumluluğun.

  1. Bir tüketici ihtiyacınız olacak sanmıyorum o belirten: My duygu olduğunu korumalı veya özel iki şey yapıyoruz olarak işaretlemek için vardır.
  2. Başka birinin neye ihtiyacı olduğunu tahmin etme.

ve 'ı don, bu son iki sebeplerden dolayı

(etrafındaki yollar What's the best way to unit test protected & private methods in Ruby? bakınız), özel test yöntemleri gerçek bir ağrı olabilir gibi ek olarak, bu zor test etmek yapıyoruz t onlarla uğraşmak. Sınıflarınız/yöntemleriniz ve tüketicileriniz arasında bir çeşit bariyer istediyseniz (kod veya geliştiriciler olsun) o zaman başka, daha etkili yollar vardır (vekiller, gizleme, şifreleme, şifre korumalı yöntemler vb.). Aksi halde, neden kullandığınız aynı araçlara erişemezsiniz?

+1

+1 benzer düşünceler. ** Neden kullanmamın tek sebebi: ** rdoc ''visibility' seçeneğine sahiptir. Herkese açık, korunan ve özel olarak, daha fazla veya daha az ayrıntı içeren farklı belgeleme sürümleri üretebilirim. – knut

+0

@knut bu ilginç bir fikir, bunu aklımda tutmak zorundayım. Ben yardcımı kullanma eğilimindeyim ve 'private' etiketine sahipti, ama hangi kullanımın olabileceğini hiç görmedim. Teşekkürler. – iain