Metode private și protejate Ruby: înțelegerea vizibilității metodei

ce este o metodă privată în Ruby?

este un tip de metodă pe care o puteți apela numai din interiorul clasei unde este definită.

aceasta vă permite să controlați accesul la metodele dvs.

o metodă rubin poate fi:

  • privat
  • public (implicit)
  • protejat

implicit toate metodele dvs. sunt public.

oricine le poate folosi!

dar puteți schimba acest lucru, făcând o metodă private sau protected.

de ce este util acest lucru?

pentru că puteți face aceste metode mai ușor de schimbat.

Imaginați-vă că scrieți o bibliotecă de coduri care va fi utilizată în câteva proiecte diferite la locul de muncă.

când aceste proiecte implementează biblioteca dvs., vor apela metode pe clasele pe care le-ați creat.

acum:

lansați o nouă versiune…

dar ați decis să schimbați numele pe o metodă public.

asta va produce erori la fiecare proiect care folosește această metodă!

amintiți-vă acest lucru:

având mai puține metode publice, creșteți libertatea schimbării în clasa voastră.

să vedem câteva exemple de cod!

înțelegerea metodelor Private în Ruby

ați văzut vreodată mesajul de eroare” metoda privată numită”?

acesta:

self.puts 123# NoMethodError: private method `puts' called

apoi ați încercat să utilizați incorect o metodă private.

puteți utiliza numai o metodă privată de la sine.

exemplu:

puts 123

este aceeași metodă, dar trebuie să o numiți așa.

metodele Private sunt întotdeauna numite în contextul self.

cu alte cuvinte…

puteți utiliza numai metode private cu:

  • alte metode din aceeași clasă
  • metode moștenite din clasa părinte
  • metode incluse dintr-un modul

aceasta înseamnă că nu puteți apela metode private din afara clasei care le definește.

pentru că asta ar necesita un „receptor explicit”.

cu excepția cazului în care…

utilizați o metodă ca send pentru a ocoli această regulă.

send(:puts, "apple")

cum definiți o metodă private?

def bacon "private bacon"endprivate :bacon

cuvântul private în sine nu este un cuvânt cheie, este o metodă definită pe modulul Kernel.

unde să puneți metodele Private

este normal ca o clasă să aibă mai multe metode private.

unde plasați aceste metode?

fă asta:

class Food def public_method end private def bacon end def orange end def coconut endend

fiecare metodă de instanță după private devine o metodă privată.

puteți utiliza private_class_method :method_namedacă doriți să definiți o metodă de clasă ca privată

este un model comun să definiți mai întâi toate metodele publice, apoi să definiți metodele private împreună la sfârșitul clasei.

metode publice

Public este vizibilitatea metodei implicite în Ruby.

Iată un exemplu:

def orange "Vitamin C"end

dacă aveți un obiect food care definește orange, îl puteți numi astfel:

food.orange

dacă o metodă a fost făcută privată sau protejată, o puteți face din nou publică.

public :orange

ce este o metodă protejată?

metodele protejate sunt mai puțin frecvente.

sunt ca private metode, dar le puteți apela pe un obiect & nu doar direct.

dacă încercați acest exemplu cu privat, veți primi o eroare:

class Food def initialize(name) @name = name end def ==(other) name == other.name end protected attr_reader :nameendfood = Food.new("chocolate")puts food == food

primiți eroarea deoarece namear fi privat, deci nu puteți face other.name.

dar cu protected acest cod funcționează!

privat Vs metode protejate

asta e diferența, faptul că protected păstrează metoda private, dar, de asemenea, vă permite să apelați această metodă pe un obiect.

cu privat puteți face doar name, cu protejat puteți face object.name.

când trebuie să utilizați protejat?

numai dacă aveți un caz foarte specific, cum ar fi metoda equals (==).

documentația Ruby recomandă utilizarea private în loc de protected ori de câte ori este posibil.

și există această notă:

„o metodă protejată este lentă, deoarece nu poate utiliza memoria cache inline.”

am fost curios despre asta, așa că am rulat câteva repere:

public: 2813891.9 i/sprivate: 2699273.8 i/sprotected: 2572122.0 i/s

aceasta este o diferență de 8,5% în performanță.

tutorial Video

rezumat

ai învățat despre vizibilitate metoda Ruby, publice, private & metode protejate. Acestea nu sunt cuvinte cheie Ruby, ele sunt metode ele însele definite pe Module clasă.



+