0Pricing
Ruby Academy · Lekcja

Definiowanie modułów

Przestrzenie nazw i metody

Definiowanie modułów to bezpłatna lekcja Ruby Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Ruby Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Ruby Academy zawiera 4 lekcji w sumie.

Przestrzenie nazw i metody

Moduł to kontener na metody i stałe. W przeciwieństwie do klasy nie można utworzyć instancji modułu. Moduły pełnią dwie funkcje: grupują kod (tworzą przestrzenie nazw) i współdzielą zachowanie (jako miksiny).

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

Metody modułu

Zdefiniuj metodę z użyciem self., aby wywoływać ją bezpośrednio na module, podobnie jak funkcję narzędziową. Takie metody często nazywa się funkcjami modułu.

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

Stałe modułu

Moduły mogą również przechowywać stałe. Dostęp do nich uzyskuje się za pomocą operatora zakresu ::.

module Physics
  GRAVITY = 9.81
end
puts Physics::GRAVITY

Umieszczanie klas w przestrzeni nazw

Umieszczaj klasy w module, aby uniknąć kolizji nazw. Pełna nazwa korzysta z operatora ::.

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

Dlaczego przestrzenie nazw mają znaczenie

Dwie biblioteki mogą definiować obiekt Logger. Przestrzenie nazw rozdzielają je od siebie: Audio::Logger i Network::Logger nigdy nie wejdą ze sobą w konflikt.

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 sprawia, że następujące po nim metody można wywoływać zarówno na module, jak i jako prywatne metody instancji po dołączeniu modułu. Eliminuje to konieczność powtarzania self..

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

Grupowanie powiązanych stałych

Moduły świetnie nadają się do porządkowania powiązanych wartości konfiguracyjnych pod jedną czytelną nazwą.

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

Zagnieżdżone moduły

Moduły można zagnieżdżać w innych modułach, aby uzyskać bardziej szczegółową organizację kodu.

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

Wyświetlanie zawartości modułu

Metody refleksji pozwalają sprawdzać w czasie działania programu stałe i metody modułu.

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

Modułów nie można instancjonować

Próba użycia Module.new w stylu nazwanego modułu kończy się niepowodzeniem, ponieważ moduł nie ma konstruktora instancji. Moduł jest przestrzenią nazw i kontenerem zachowania, a nie schematem do tworzenia obiektów.

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

Składanie wszystkiego w całość

Moduły porządkują kod i umożliwiają współdzielenie go:

  • Używaj self.method do definiowania wywoływalnych funkcji modułu.
  • Przechowuj w nich stałe, do których dostęp uzyskuje się za pomocą ::.
  • Umieszczaj klasy w przestrzeniach nazw, aby zapobiegać kolizjom.
  • Modułu nie można instancjonować.
module Geometry
  PI = 3.14159
  def self.circle_area(r)
    PI * r * r
  end
end
puts Geometry.circle_area(2)

Szybki test

Proszę sprawdzić swoją znajomość modułów.

Podsumowanie

Omówiono definiowanie modułów:

  • Moduły grupują metody i stałe.
  • self.method definiuje wywoływalne funkcje modułu.
  • :: zapewnia dostęp do stałych i zagnieżdżonych klas.
  • Przestrzenie nazw zapobiegają kolizjom nazw.
module Util
  def self.shout(s)
    s.upcase + "!"
  end
end
puts Util.shout("ruby")

Często zadawane pytania

Czy lekcja „Definiowanie modułów” jest bezpłatna?

Tak — pełny tekst „Definiowanie modułów” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Ruby Academy, przejdź na CoddyKit PRO. Kurs Ruby Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Definiowanie modułów”?

Przestrzenie nazw i metody Ćwiczysz Ruby Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Ruby Academy?

Nie wymagamy żadnego doświadczenia. Ruby Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Definiowanie modułów”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Ruby Academy?

Tak. Każda lekcja Ruby Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Definiowanie modułów
  2. include i extend
  3. Comparable i Enumerable
  4. prepend i wyszukiwanie metod
← Powrót do Ruby Academy