Menu
Coddy logo textTech

Definindo Classes

Parte da seção Programação orientada a objetos do Journey de Ruby da Coddy. Lição 2 de 57.

Uma classe descreve um tipo de objeto: o que ele sabe e o que pode fazer. class Dog ... end declara a classe, e Dog.new cria um objeto dessa classe, uma instância. Um método definido com def dentro da classe pode ser chamado em cada instância:

class Dog
  def speak
    "Woof"
  end
end

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

Saída:

Woof
Dog

new cria o objeto e, em seguida, chama seu método initialize com os argumentos que você forneceu a new. initialize configura o objeto, geralmente armazenando os argumentos em variáveis de instância, cujos nomes começam com @:

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

Saída:

Rex says Woof
Bella says Woof

Os métodos recebem argumentos como qualquer método Ruby e retornam o valor de sua última expressão. Cada chamada a new cria um objeto separado:

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

Saída:

5
3.0

Nomes de classes são constantes escritas em CamelCase (BankAccount); nomes de métodos e variáveis usam snake_case (deposit_money). new verifica seus argumentos em relação a initialize, portanto um argumento ausente gera ArgumentError:

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

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

Saída:

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

Desafio

Fácil

Complete a classe Formatter. Seu método title(text) retorna o texto com cada palavra em letras maiúsculas (the hobbit resulta em The Hobbit), slug(text) retorna as palavras em letras minúsculas unidas por - (the-hobbit), e initials(text) retorna a primeira letra de cada palavra em letras maiúsculas (TH).

O código fornecido cria um Formatter e, para cada linha de entrada, imprime os três resultados em linhas separadas.

Seu código deve ficar em formatter.rb. main.rb contém o código fornecido de entrada/saída e não pode ser editado.

Experimente você mesmo

require_relative 'formatter'

# Código de entrada/saída fornecido: mantenha-o como está
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 iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação orientada a objetos

Pratique por conta própria: Compilador de Ruby online