Ruby Academy · Oppitunti

Metodien dynaaminen määrittäminen

Opitte määrittämään ja kutsumaan metodeja dynaamisesti define_method- ja method_missing-metodeilla.

Oppitunti 2/410 vaihetta

Metodien dynaaminen määrittäminen on ilmainen Ruby Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Ruby Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Ruby Academy-kurssilla on yhteensä 4 oppituntia.

Metodien luominen dynaamisesti

Dynaaminen metodien määrittely

Rubyssa metodeja voidaan luoda dynaamisesti suorituksen aikana.

Tämä mahdollistaa joustavamman ja uudelleenkäytettävämmän koodin.

Metodien dynaaminen määrittäminen — kuvitus 1

<code>define_method</code>-komennon käyttäminen

define_method-metodin avulla metodeja voidaan määrittää dynaamisesti.

class Person
  define_method(:greet) { puts 'Hello!' }
end

p = Person.new
p.greet

<code>define_method</code>-komennon käyttäminen parametrien kanssa

Dynaamisesti luoduille metodeille voi välittää argumentteja.

class Person
  define_method(:greet) { |name| puts "Hello, #{name}!" }
end

p = Person.new
p.greet('Alice')

<code>method_missing</code>-komennon käyttäminen

method_missing-metodi sieppaa kutsut määrittelemättömille metodeille.

class Person
  def method_missing(name, *args)
    puts "Method '#{name}' is missing!"
  end
end

p = Person.new
p.unknown_method

<code>method_missing</code>-komennon dynaaminen käsittely

method_missing-komennon avulla voitte toteuttaa joustavan metodien käsittelyn.

class DynamicPerson
  def method_missing(name, *args)
    if name.to_s.start_with?('say_')
      puts "You asked me to say: #{name.to_s.split('_')[1..-1].join(' ')}"
    else
      super
    end
  end
end

p = DynamicPerson.new
p.say_hello_world

<code>respond_to_missing?</code>-metodin ohittaminen

Ohittakaa respond_to_missing?, jotta metodien tarkistukset käsitellään oikein.

class DynamicPerson
  def method_missing(name, *args)
    if name.to_s.start_with?('say_')
      puts "Saying: #{name.to_s.split('_')[1..-1].join(' ')}"
    else
      super
    end
  end
  
  def respond_to_missing?(name, include_private = false)
    name.to_s.start_with?('say_') || super
  end
end

p = DynamicPerson.new
puts p.respond_to?(:say_hello)

<code>method_missing</code>-komennon käyttäminen dynaamisiin gettereihin ja settereihin

Dynaamisia attribuutteja voi luoda komennon method_missing avulla.

class DynamicPerson
  def initialize
    @data = {}
  end
  
  def method_missing(name, *args)
    attribute = name.to_s.sub(/=$/, '')
    if name.to_s.end_with?('=')
      @data[attribute] = args.first
    else
      @data[attribute]
    end
  end
end

p = DynamicPerson.new
p.name = 'Alice'
puts p.name

<code>method_missing</code>-komennon tietoturvariskit

method_missing-komennon virheellinen käyttö voi aiheuttaa riskejä:

  • Odottamaton toiminta tuntemattomia metodeja käsiteltäessä.
  • Liiallisten metodihakujen aiheuttamat mahdolliset suorituskykyongelmat.
  • Tietoturva-aukot, jos komentoa käytetään yhdessä käyttäjän syötteen kanssa.

Dynaamisten metodien kertaus

Onnittelut!

Olette oppineet määrittämään ja kutsumaan metodeja dynaamisesti Rubyssa.

Seuraavaksi tutustutte avoimiin luokkiin ja monkey patching -tekniikkaan.

Metodien dynaaminen määrittäminen — kuvitus 10
Aloita maksutta

Opi Ruby tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
29
Oppitunnit
109

Usein kysytyt kysymykset

Onko oppitunti ”Metodien dynaaminen määrittäminen” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Ruby Academy-oppimispolun 3 oppituntia, myös oppitunnin “Metodien dynaaminen määrittäminen”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Ruby Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Metodien dynaaminen määrittäminen”?

Opitte määrittämään ja kutsumaan metodeja dynaamisesti define_method- ja method_missing-metodeilla. Harjoittelet Ruby Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Ruby Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Ruby Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Metodien dynaaminen määrittäminen”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Ruby Academy-oppitunnilla?

Kyllä. Jokainen Ruby Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Mitä metaprogrammointi on?
  2. Metodien dynaaminen määrittäminen
  3. Avoimet luokat ja monkey patching
  4. sendin ja evalin käyttäminen
← Takaisin: Ruby Academy