Ruby Private & Protected Methods: a módszer láthatóságának megértése

mi a privát módszer a Ruby-ban?

ez egy olyan típusú módszer, amelyet csak az osztály belsejéből hívhat meg, ahol meg van határozva.

ez lehetővé teszi a módszerekhez való hozzáférés ellenőrzését.

a Rubin módszer lehet:

  • privát
  • nyilvános (alapértelmezett)
  • védett

alapértelmezés szerint az összes módszer public.

bárki használhatja őket!

de ezt megváltoztathatja egy privatevagy protected módszerrel.

miért hasznos ez?

mert megkönnyítheti ezeket a módszereket.

képzelje el, hogy egy kódkönyvtárat ír, amelyet néhány különböző projektben használnak a munkahelyen.

amikor ezek a projektek végrehajtják a könyvtárat, metódusokat fognak hívni az Ön által létrehozott osztályokon.

most:

kiad egy új verziót…

de úgy döntött, hogy megváltoztatja a nevet egy public módszerrel.

ez minden olyan projektnél hibát fog okozni, amely ezt a módszert használja!

emlékezz erre:

azáltal, hogy kevesebb nyilvános módszer van, növeli a változás szabadságát az osztályán belül.

nézzünk meg néhány kódot!

a privát módszerek megértése Ruby-ban

láttad már valaha a “privát módszer neve” hibaüzenetet?

ez egy:

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

ezután hibásan próbálta használni a private módszert.

csak privát módszert használhat önmagában.

példa:

puts 123

ugyanaz a módszer, de így kell hívni.

a privát metódusokat mindig a self kontextusában hívják meg.

más szavakkal…

csak privát módszereket használhat:

  • más módszerek ugyanabból az osztályból
  • a szülő osztálytól örökölt módszerek
  • modulból vett módszerek

ez azt jelenti, hogy nem hívhat meg privát módszereket az őket definiáló osztályon kívülről.

mert ehhez “explicit vevőre”lenne szükség.

hacsak…

a send – hez hasonló módszert nem használ a szabály megkerülésére.

send(:puts, "apple")

hogyan definiál egy private módszert?

def bacon "private bacon"endprivate :bacon

a private szó önmagában nem kulcsszó, hanem a Kernel modulban meghatározott módszer.

hová tegye a privát metódusokat

normális, ha egy osztálynak egynél több privát metódusa van.

hol helyezi el ezeket a módszereket?

tegye ezt:

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

a private után minden példány metódus privát metódussá válik.

használhatja az private_class_method :method_name – et, ha egy osztály metódust privátként szeretne definiálni

ez egy általános minta, hogy először az összes nyilvános metódust definiálja, majd az osztály végén együtt definiálja a private metódusokat.

nyilvános módszerek

Nyilvános az alapértelmezett módszer láthatósága a Ruby-ban.

Íme egy példa:

def orange "Vitamin C"end

ha van egy food objektum, amely meghatározza a orange értéket, akkor ezt így hívhatja:

food.orange

ha egy módszert priváttá vagy védetté tettek, újra nyilvánosságra hozhatja.

public :orange

mi a Védett módszer?

a Védett módszerek kevésbé gyakoriak.

olyanok, mint a private módszerek, de meghívhatja őket egy objektumon & nem csak közvetlenül.

ha ezt a példát a private programmal próbálja meg, hibaüzenet jelenik meg:

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

akkor kap a hiba, mert name lenne privát, így nem lehet csinálni other.name.

de protected ez a kód működik!

privát vs védett módszerek

ez a különbség, az a tény, hogy protected megtartja a módszert private, de lehetővé teszi, hogy ezt a módszert egy objektumra hívja.

a privát csak akkor lehet csinálni name, a védett meg tudod csinálni object.name.

mikor kell használni a védett?

csak akkor, ha van egy nagyon konkrét eset, például az equals (==) módszer.

a Ruby dokumentáció javasolja a private használatát a protected helyett, amikor csak lehetséges.

és itt van ez a jegyzet:

“a védett módszer lassú, mert nem tudja használni a belső gyorsítótárat.”

kíváncsi voltam erre, ezért futottam néhány referenciaértéket:

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

ez 8,5% – os különbség a teljesítményben.

Video Tutorial

összefoglaló

megtanultad a Ruby módszer láthatóságát, nyilvános, privát & védett módszerek. Ezek nem Ruby kulcsszavak, hanem a Module osztályban definiált módszerek.



+