Hva er en privat metode I Ruby?
Det er en type metode som DU bare kan ringe fra innsiden av klassen der den er definert.
dette lar deg kontrollere tilgangen til metodene dine.
En Rubinmetode kan være:
- privat
- offentlig (standard)
- beskyttet
SOM standard er alle metodene public
.
Alle kan bruke dem!
men du kan endre dette ved å lage en metode private
eller protected
.
Hvorfor er dette nyttig?
fordi du kan gjøre disse metodene enklere å endre.
Tenk deg at du skriver et kodebibliotek som skal brukes i noen forskjellige prosjekter på jobben.
når disse prosjektene implementerer biblioteket ditt, kommer de til å ringe metoder på klassene du har opprettet.
Nå:
du slipper en ny versjon…
Men du bestemte deg for å endre navnet på en public
– metode.
Det kommer til å produsere feil på hvert prosjekt som bruker denne metoden!
Husk dette:
VED Å ha MINDRE offentlige metoder ØKER du endringsfriheten i klassen din.
La oss se noen kodeeksempler!
Forstå Private Metoder I Ruby
har du noen gang sett feilmeldingen «privat metode kalt»?
Denne:
self.puts 123# NoMethodError: private method `puts' called
Da har du forsøkt å bruke en private
– metode feil.
du kan bare bruke en privat metode av seg selv.
Eksempel:
puts 123
det er den samme metoden, men du må kalle det slik.
Private metoder kalles alltid innenfor konteksten self
.
Med andre ord…
du kan bare bruke private metoder med:
- Andre metoder fra samme klasse
- Metoder arvet fra den overordnede klassen
- Metoder inkludert fra en modul
dette betyr at du ikke kan kalle private metoder fra utenfor klassen som definerer dem.
Fordi det ville kreve en «eksplisitt mottaker».
Med Mindre…
du bruker en metode som send
for å omgå denne regelen.
send(:puts, "apple")
hvordan definerer du en private
metode?
def bacon "private bacon"endprivate :bacon
ordet private
i seg selv er ikke et søkeord, det er en metode definert på modulen Kernel
.
Hvor Du Skal Plassere Dine Private Metoder
det er normalt at en klasse har mer enn en privat metode.
Hvor plasserer du disse metodene?
Gjør dette:
class Food def public_method end private def bacon end def orange end def coconut endend
Hver instansmetode etter private
blir en privat metode.
du kan bruke
private_class_method :method_name
hvis du vil definere en klassemetode som privat
det er et vanlig mønster å definere alle dine offentlige metoder først, og deretter definere dine private
metoder sammen på slutten av klassen.
Offentlige Metoder
Offentlig Er standard metodesynlighet I Ruby.
her er et eksempel:
def orange "Vitamin C"end
hvis du har et objekt food
som definerer orange
, kan du ringe det slik:
food.orange
hvis en metode er gjort privat eller beskyttet, kan du gjøre den offentlig igjen.
public :orange
Hva Er En Beskyttet Metode?
Beskyttede metoder er mindre vanlige.
de er som private
metoder, men du kan ringe dem på et objekt & ikke bare direkte.
hvis du prøver dette eksemplet med privat, får du en feil:
class Food def initialize(name) @name = name end def ==(other) name == other.name end protected attr_reader :nameendfood = Food.new("chocolate")puts food == food
du får feilen fordi name
ville være privat, så du kan ikke gjøre other.name
.
Men med protected
fungerer denne koden!
Private vs Beskyttede Metoder
det er forskjellen, det faktum at protected
holder metoden private
, men det lar deg også ringe den metoden på et objekt.
med privat kan du bare gjøre name
, med beskyttet kan du gjøre object.name
.
når bør du bruke beskyttet?
Bare hvis du har et veldig spesifikt tilfelle, som equals (==
) – metoden.
Ruby-dokumentasjonen anbefaler at du bruker private
i stedet for protected
når det er mulig.
Og det er dette notatet:
«en beskyttet metode er treg fordi den ikke kan bruke innebygd hurtigbuffer.»
jeg var nysgjerrig på dette, så jeg kjørte noen referanser:
public: 2813891.9 i/sprivate: 2699273.8 i/sprotected: 2572122.0 i/s
det er en forskjell på 8,5% i ytelse.
Video Tutorial
Sammendrag
Du har lært Om Ruby metode synlighet, offentlig, privat & beskyttede metoder. Dette er Ikke Ruby søkeord, de er metoder selv definert på klassen Module
.