Menu
Coddy logo textTech

Definiowanie klas

Część sekcji Programowanie obiektowe ścieżki Ruby w Coddy. Lekcja 2 z 57.

Klasa opisuje rodzaj obiektu: co wie i co potrafi. class Dog ... end deklaruje klasę, a Dog.new tworzy obiekt tej klasy, czyli instancję. Metodę zdefiniowaną za pomocą def wewnątrz klasy można wywołać dla każdej instancji:

class Dog
  def speak
    "Woof"
  end
end

rex = Dog.new
puts rex.speak
puts rex.class

Wynik:

Woof
Dog

new tworzy obiekt, a następnie wywołuje jego metodę initialize z argumentami przekazanymi do new. initialize konfiguruje obiekt, zwykle zapisując argumenty w zmiennych instancji, których nazwy zaczynają się od @:

class Dog
  def initialize(name)
    @name = name
  end

  def speak
    "#{@name} says Woof"
  end
end

puts Dog.new("Rex").speak
puts Dog.new("Bella").speak

Wynik:

Rex says Woof
Bella says Woof

Metody przyjmują argumenty tak jak każda metoda w Ruby i zwracają wartość ostatniego wyrażenia. Każde wywołanie new tworzy osobny obiekt:

class Calculator
  def add(a, b)
    a + b
  end

  def average(numbers)
    numbers.sum.to_f / numbers.size
  end
end

calc = Calculator.new
puts calc.add(2, 3)
puts calc.average([1, 2, 3, 6])

Wynik:

5
3.0

Nazwy klas to stałe zapisane wielkimi literami w notacji CamelCase (BankAccount); nazwy metod i zmiennych zapisuje się w notacji snake_case (deposit_money). new sprawdza argumenty zgodnie z initialize, więc brakujący argument powoduje zgłoszenie ArgumentError:

class Point
  def initialize(x, y)
    @x = x
    @y = y
  end
end

begin
  Point.new(1)
rescue ArgumentError => e
  puts e.message
end

Wynik:

wrong number of arguments (given 1, expected 2)
challenge icon

Wyzwanie

Łatwy

Uzupełnij klasę Formatter. Jej metoda title(text) zwraca tekst, w którym każde słowo zaczyna się wielką literą (the hobbit daje The Hobbit), slug(text) zwraca słowa zapisane małymi literami i połączone za pomocą - (the-hobbit), a initials(text) zwraca pierwszą literę każdego słowa zapisaną wielką literą (TH).

Dostarczony kod tworzy jeden obiekt Formatter i dla każdej linii wejściowej wypisuje trzy wyniki w osobnych liniach.

Twój kod umieść w pliku formatter.rb. main.rb zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.

Spróbuj swoich sił

require_relative 'formatter'

# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
input = []
while (line = gets)
  input << line.chomp
end
formatter = Formatter.new
input.each do |line|
  puts formatter.title(line)
  puts formatter.slug(line)
  puts formatter.initials(line)
end
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Ruby online