Menu
Coddy logo textTech

Определение классов

Часть раздела Объектно-ориентированное программирование путешествия по Ruby на Coddy. Урок 2 из 57.

Класс описывает разновидность объекта: что он знает и что умеет делать. class Dog ... end объявляет класс, а Dog.new создаёт объект этого класса — экземпляр. Метод, определённый с помощью def внутри класса, можно вызвать для каждого экземпляра:

class Dog
  def speak
    "Woof"
  end
end

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

Вывод:

Woof
Dog

new создаёт объект, а затем вызывает его метод initialize с аргументами, которые вы передали в new. initialize настраивает объект, обычно сохраняя аргументы в переменных экземпляра, имена которых начинаются с @:

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

Результат:

Rex says Woof
Bella says Woof

Методы принимают аргументы, как любой метод Ruby, и возвращают значение своего последнего выражения. Каждый вызов new создаёт отдельный объект:

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])

Вывод:

5
3.0

Имена классов — это константы, записанные в CamelCase (BankAccount); имена методов и переменных используют snake_case (deposit_money). new проверяет свои аргументы по сравнению с initialize, поэтому отсутствие аргумента вызывает ArgumentError:

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

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

Вывод:

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

Задание

Легко

Завершите класс Formatter. Его метод title(text) возвращает текст, в котором каждое слово написано с заглавной буквы (the hobbit даёт The Hobbit), slug(text) возвращает слова в нижнем регистре, соединённые с помощью - (the-hobbit), а initials(text) возвращает первую букву каждого слова в верхнем регистре (TH).

Предоставленный код создаёт один объект Formatter и для каждой входной строки выводит три результата в отдельных строках.

Ваш код должен находиться в formatter.rb. В файле main.rb содержится предоставленный код ввода/вывода, и его нельзя изменять.

Попробуйте сами

require_relative 'formatter'

# Предоставленный код ввода/вывода: оставьте его как есть
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 iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Объектно-ориентированное программирование

Потренируйтесь самостоятельно: Онлайн-компилятор Ruby