Ruby Academy · Oppitunti

include ja extend

Sekoita toiminnallisuutta mukaan.

Oppitunti 2/413 vaihetta

include ja extend 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.

Toiminnallisuuden jakaminen mixineillä

Moduulien todellinen voima on mixin: metodien jakaminen luokkien kesken ilman perintää. Kaksi tärkeintä työkalua ovat include ja extend.

module Walkable
  def walk
    "#{name} is walking"
  end
end
class Person
  include Walkable
  attr_reader :name
  def initialize(name)
    @name = name
  end
end
puts Person.new("Ada").walk

include lisää instanssimetodeja

include lisää moduulin metodit instanssimetodeiksi. Luokan jokainen olio saa nämä metodit käyttöönsä.

module Sayable
  def say(msg)
    "#{msg}!"
  end
end
class Dog
  include Sayable
end
puts Dog.new.say("Woof")

Uudelleenkäyttö luokkien välillä

Yksi moduuli voidaan sisällyttää moniin toisistaan riippumattomiin luokkiin, jolloin toiminnallisuus voidaan jakaa ilman yhteistä yliluokkaa.

module Timestamped
  def stamp
    "created"
  end
end
class Post; include Timestamped; end
class Comment; include Timestamped; end
puts Post.new.stamp
puts Comment.new.stamp

extend lisää luokkametodeja

extend lisää moduulin metodit luokkametodeiksi eli itse luokkaoliolle määritetyiksi metodeiksi.

module Findable
  def find(id)
    "Finding record #{id}"
  end
end
class User
  extend Findable
end
puts User.find(42)

extend olioon

Voitte käyttää extend-syntaksia yksittäiseen olioon, jolloin vain se saa metodit muiden olioiden pysyessä ennallaan.

module Admin
  def privileges
    "all access"
  end
end
user = Object.new
user.extend(Admin)
puts user.privileges

include vai extend

Muistakaa ero:

  • include => metodeista tulee instanssimetodeja.
  • extend => metodeista tulee luokka- tai oliometodeja.
module Helper
  def help; "helping"; end
end
class A; include Helper; end
class B; extend Helper; end
puts A.new.help
puts B.help

Moduulit näkevät isäntäolion metodit

Mixinillä lisätty metodi suoritetaan isäntäolion kontekstissa, joten se voi kutsua isäntäolion omia metodeja ja käyttää sen tietoja.

module Describable
  def describe
    "I am #{role}"
  end
end
class Worker
  include Describable
  def role; "a worker"; end
end
puts Worker.new.describe

included-koukku

Määritelkää self.included(base), jotta koodia suoritetaan automaattisesti, kun moduuli sisällytetään. Klassinen käyttötapa on lisätä samalla luokkametodeja.

module Trackable
  def self.included(base)
    puts "Trackable added to #{base}"
  end
end
class Order
  include Trackable
end

Jäsenyyden tarkistaminen

is_a? ja ancestors osoittavat, että sisällytetystä moduulista tulee osa olion tyyppiketjua.

module Flyable; end
class Bird; include Flyable; end
b = Bird.new
puts b.is_a?(Flyable)
p Bird.ancestors

Useiden mixinien yhdistäminen

Luokka voi sisällyttää useita moduuleja ja koota toiminnallisuuden monista pienistä, tarkoitukseen keskittyvistä osista.

module Swimmable; def swim; "swimming"; end; end
module Runnable; def run; "running"; end; end
class Athlete
  include Swimmable
  include Runnable
end
a = Athlete.new
puts a.swim
puts a.run

Kootaan yhteen

Mixinit jakavat toiminnallisuutta joustavasti:

  • include instanssimetodeille.
  • extend luokka- tai yksittäisen olion metodeille.
  • Mixinillä lisätyt metodit suoritetaan isäntäolion kontekstissa.
  • Yhdistelkää useita pieniä moduuleja.
module Greet
  def hi; "hi from #{self.class}"; end
end
class Cat; include Greet; end
puts Cat.new.hi

Pikatesti

Testatkaa, miten hyvin ymmärrätte include- ja extend-käskyjen toiminnan.

Kertaus

Opitte mixineistä:

  • include => instanssimetodit.
  • extend => luokka- tai yksittäisen olion metodit.
  • Mixinillä lisätyt metodit suoritetaan isäntäolion kontekstissa.
  • included-koukku suoritetaan moduulia sisällytettäessä.
module Loud
  def shout(s); s.upcase; end
end
class Speaker; include Loud; end
puts Speaker.new.shout("hello")
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 ”include ja extend” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Ruby Academy-oppimispolun 3 oppituntia, myös oppitunnin “include ja extend”. 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 ”include ja extend”?

Sekoita toiminnallisuutta mukaan. 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 ”include ja extend”-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. Moduulien määrittely
  2. include ja extend
  3. Comparable ja Enumerable
  4. prepend ja metodien ratkaisu
← Takaisin: Ruby Academy