Ruby Academy · Oppitunti

Moduulien määrittely

Nimiavaruudet ja metodit.

Oppitunti 1/413 vaihetta

Moduulien määrittely on ilmainen Ruby Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/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.

Nimiavaruudet ja metodit

Moduuli on metodien ja vakioiden säilö. Toisin kuin luokasta, moduulista ei voi luoda ilmentymää. Moduuleilla on kaksi tehtävää: koodin ryhmittely eli nimiavaruuksien luominen ja toiminnallisuuden jakaminen mixinien avulla.

module Greeter
  def self.hello
    "Hello from the module"
  end
end
puts Greeter.hello

Moduulimetodit

Määritelkää metodi käyttämällä self.-etuliitettä, jotta sitä voidaan kutsua suoraan moduulista apufunktion tapaan. Näitä kutsutaan usein moduulifunktioiksi.

module MathTools
  def self.square(x)
    x * x
  end
end
puts MathTools.square(7)

Moduulivakiot

Moduulit sisältävät myös vakioita. Käyttäkää niitä scope-operaattorilla ::.

module Physics
  GRAVITY = 9.81
end
puts Physics::GRAVITY

Luokkien sijoittaminen nimiavaruuksiin

Ympäröikää luokat moduulilla, jotta nimien törmäyksiltä vältytään. Koko nimi käyttää ::-operaattoria.

module Store
  class Item
    def initialize(name)
      @name = name
    end
    def to_s
      @name
    end
  end
end
puts Store::Item.new("Book")

Miksi nimiavaruudet ovat tärkeitä

Kaksi kirjastoa voi määritellä kumpikin oman Logger-luokkansa. Nimiavaruudet pitävät ne erillään: Audio::Logger ja Network::Logger eivät koskaan törmää toisiinsa.

module Audio
  class Logger
    def name; "audio logger"; end
  end
end
module Network
  class Logger
    def name; "network logger"; end
  end
end
puts Audio::Logger.new.name
puts Network::Logger.new.name

module_function

module_function tekee seuraavista metodeista kutsuttavia sekä moduulista että yksityisinä instanssimetodeina, kun moduuli otetaan mixiniksi. Näin self.-etuliitettä ei tarvitse toistaa.

module Calc
  module_function
  def add(a, b)
    a + b
  end
end
puts Calc.add(2, 3)

Aiheeseen liittyvien vakioiden ryhmittely

Moduulit sopivat erinomaisesti toisiinsa liittyvien määritysarvojen järjestämiseen yhden selkeän nimen alle.

module Color
  RED = "#FF0000"
  GREEN = "#00FF00"
  BLUE = "#0000FF"
end
puts Color::GREEN

Sisäkkäiset moduulit

Moduuleja voi sijoittaa toisten moduulien sisään rakenteen järjestämiseksi tarkemmin.

module App
  module Config
    VERSION = "1.0"
  end
end
puts App::Config::VERSION

Moduulin sisällön luetteleminen

Reflektiometodien avulla voitte tarkastella moduulin vakioita ja metodeja suorituksen aikana.

module Settings
  WIDTH = 80
  HEIGHT = 24
end
p Settings.constants

Moduuleista ei voi luoda ilmentymiä

Nimetyn moduulin käsitteleminen Module.new-kutsulla epäonnistuu, koska moduulilla ei ole ilmentymien luomiseen tarkoitettua konstruktoria. Se on nimiavaruus ja toiminnallisuuden säilö, ei olioiden mallipohja.

module Tools
end
begin
  Tools.new
rescue NoMethodError => e
  puts "Cannot instantiate: #{e.message}"
end

Kootaan yhteen

Moduulit järjestävät ja jakavat koodia:

  • Käyttäkää self.method-syntaksia kutsuttavien moduulifunktioiden määrittämiseen.
  • Säilyttäkää vakioita, joita käytetään ::-operaattorilla.
  • Sijoittakaa luokat nimiavaruuksiin törmäysten estämiseksi.
  • Moduulista ei voi luoda ilmentymää.
module Geometry
  PI = 3.14159
  def self.circle_area(r)
    PI * r * r
  end
end
puts Geometry.circle_area(2)

Pikatesti

Testatkaa, miten hyvin ymmärrätte moduulit.

Kertaus

Opitte määrittämään moduuleja:

  • Moduulit ryhmittelevät metodeja ja vakioita.
  • self.method määrittää kutsuttavia moduulifunktioita.
  • :: käsittelee vakioita ja sisäkkäisiä luokkia.
  • Nimiavaruudet estävät nimien törmäykset.
module Util
  def self.shout(s)
    s.upcase + "!"
  end
end
puts Util.shout("ruby")
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 ”Moduulien määrittely” ilmainen?

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

Nimiavaruudet ja metodit. 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 1/4.

Kuinka kauan ”Moduulien määrittely”-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