mikä on yksityinen menetelmä Rubyssa?
se on eräänlainen metodi, johon voi soittaa vain sen luokan sisältä, jossa se on määritelty.
Näin voit kontrolloida pääsyä omiin menetelmiisi.
Rubiinimenetelmä voi olla:
- yksityinen
- Julkinen (oletusarvo)
- suojattu
oletuksena kaikki metodit ovat public
.
kuka tahansa voi käyttää niitä!
mutta tätä voi muuttaa tekemällä menetelmällä private
tai protected
.
miksi tämä on hyödyllistä?
koska voit tehdä näiden menetelmien muuttamisen helpommaksi.
Kuvittele kirjoittavasi koodikirjastoa, jota tullaan käyttämään muutamissa eri projekteissa töissä.
kun nämä projektit toteuttavat kirjastosi, ne tulevat kutsumaan metodeja luomillesi luokille.
nyt:
julkaisette uuden version …
, mutta päätitte vaihtaa nimen public
– menetelmällä.
That ’ s going to product errors on every project that is using this method!
muista tämä:
vähemmillä julkisilla menetelmillä lisätään muutoksen vapautta oman luokan sisällä.
katsotaanpa muutama koodiesimerkki!
yksityisten menetelmien ymmärtäminen Rubyssa
Oletko koskaan nähnyt” private method called ” – virheviestiä?
tämä:
self.puts 123# NoMethodError: private method `puts' called
silloin on yritetty käyttää private
– menetelmää väärin.
yksityistä menetelmää voi käyttää vain itse.
esimerkki:
puts 123
sama metodi, mutta sitä pitää kutsua näin.
yksityisiä menetelmiä kutsutaan aina self
yhteydessä.
toisin sanoen …
voit käyttää vain yksityisiä menetelmiä:
- muita saman luokan menetelmiä
- vanhemman luokasta
- moduulista
periytyviä menetelmiä ei voi kutsua yksityisiksi menetelmiksi niitä määrittelevän luokan ulkopuolelta.
, koska se vaatisi ”eksplisiittistä vastaanottajaa”.
ellei …
käytä send
kaltaista menetelmää tämän säännön ohittamiseen.
send(:puts, "apple")
miten private
– menetelmä määritellään?
def bacon "private bacon"endprivate :bacon
itse sana private
ei ole avainsana, vaan Kernel
– moduulissa määritelty menetelmä.
mihin laittaa Yksityiset metodit
on normaalia, että luokalla on useampi kuin yksi yksityinen menetelmä.
mihin nämä menetelmät sijoitetaan?
tee näin:
class Food def public_method end private def bacon end def orange end def coconut endend
jokainen instanssimenetelmä private
jälkeen muuttuu yksityiseksi menetelmäksi.
voit käyttää
private_class_method :method_name
jos haluat määritellä luokkamenetelmän yksityisenä
on yleinen kuvio määritellä ensin kaikki julkiset metodit, sitten määritellä private
metodit yhdessä luokan lopussa.
Public Methods
Public on Rubyssa menetelmän oletusnäkyvyys.
tässä esimerkki:
def orange "Vitamin C"end
jos sinulla on objekti food
, joka määrittelee orange
, voit kutsua sitä näin:
food.orange
jos menetelmästä on tehty yksityinen tai suojattu, sen voi julkistaa uudelleen.
public :orange
mikä on suojattu menetelmä?
suojatut menetelmät ovat harvinaisempia.
ne ovat kuin private
menetelmiä, mutta niitä voi kutsua kohteesta & ei vain suoraan.
jos kokeilet tätä esimerkkiä private-ohjelmalla, saat virheen:
class Food def initialize(name) @name = name end def ==(other) name == other.name end protected attr_reader :nameendfood = Food.new("chocolate")puts food == food
saat virheen, koska name
olisi yksityinen, joten et voi tehdä other.name
.
mutta protected
tämä koodi toimii!
Yksityiset vs suojatut menetelmät
siinä ero, että protected
pitää menetelmän private
, mutta se mahdollistaa myös sen, että menetelmää voi kutsua esineeseen.
yksityisellä voi tehdä vain name
, suojatulla voi tehdä object.name
.
milloin sinun tulee käyttää suojattua valmistetta?
vain, jos sinulla on hyvin erityistapaus, kuten equals (==
) – menetelmä.
Ruby-dokumentaatio suosittelee käyttämään private
: ää protected
: n sijasta aina kun se on mahdollista.
ja on tämä nuotti:
”suojattu menetelmä on hidas, koska se ei voi käyttää inline välimuisti.”
olin utelias tästä, joten tein vertailukohtia.:
public: 2813891.9 i/sprivate: 2699273.8 i/sprotected: 2572122.0 i/s
ero suorituksissa on 8,5 prosenttia.
opetusvideo
Yhteenveto
olet oppinut Ruby-menetelmän näkyvyydestä, julkisista, yksityisistä & suojatuista menetelmistä. Nämä eivät ole Rubiinisia avainsanoja, vaan ne ovat itse Module
– luokalle määriteltyjä menetelmiä.