Definir clases
Parte de la sección Programación orientada a objetos del Journey de Ruby de Coddy. Lección 2 de 57.
Una clase describe un tipo de objeto: lo que sabe y lo que puede hacer. class Dog ... end declara la clase, y Dog.new crea un objeto de esa clase, una instancia. Un método definido con def dentro de la clase puede invocarse en cada instancia:
class Dog
def speak
"Woof"
end
end
rex = Dog.new
puts rex.speak
puts rex.classSalida:
Woof
Dognew crea el objeto y después llama a su método initialize con los argumentos que proporcionaste a new. initialize configura el objeto, normalmente almacenando los argumentos en variables de instancia, cuyos nombres comienzan con @:
class Dog
def initialize(name)
@name = name
end
def speak
"#{@name} says Woof"
end
end
puts Dog.new("Rex").speak
puts Dog.new("Bella").speakSalida:
Rex says Woof
Bella says WoofLos métodos reciben argumentos como cualquier método de Ruby y devuelven el valor de su última expresión. Cada llamada a new crea un objeto independiente:
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])Salida:
5
3.0Los nombres de las clases son constantes escritas en CamelCase (BankAccount); los nombres de los métodos y las variables usan snake_case (deposit_money). new comprueba sus argumentos con respecto a initialize, por lo que la falta de un argumento genera ArgumentError:
class Point
def initialize(x, y)
@x = x
@y = y
end
end
begin
Point.new(1)
rescue ArgumentError => e
puts e.message
endSalida:
wrong number of arguments (given 1, expected 2)Desafío
FácilCompleta la clase Formatter. Su método title(text) devuelve el texto con cada palabra en mayúscula inicial (the hobbit da como resultado The Hobbit), slug(text) devuelve las palabras en minúsculas unidas por - (the-hobbit), y initials(text) devuelve la primera letra de cada palabra en mayúscula (TH).
El código proporcionado crea un Formatter y, para cada línea de entrada, imprime los tres resultados en líneas separadas.
Tu código va en formatter.rb. main.rb contiene el código proporcionado de entrada/salida y no se puede editar.
Pruébalo tú mismo
require_relative 'formatter'
# Código de entrada/salida suministrado: mantenlo 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
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Programación orientada a objetos
1Clases y objetos
Trabajar con archivosDefinir clasesVariables de instanciaMétodos y selfto_s e inspectRepaso: tarjeta de biblioteca4Encapsulación
Métodos privadosMétodos protegidosAsignadores privadosProtección del estadoRepaso: máquina expendedora7Polimorfismo y tipado pato
PolimorfismoTipado patoMétodos abstractoscase y clasesRepaso: métodos de pago2Accesores y self
Lectores y escritoresSetters personalizadosself en los métodosIdentidad e igualdadRepaso: lista de contactos5Herencia
SubclasesSobrescritura de métodosLlamar a superis_a? y ancestrosRepaso - Nómina del personal8Métodos especiales
Igualdad y hashMétodos de operadoresIndexación y adiciónColecciones personalizadasRepaso: fracciones11Proyecto: Gestión de biblioteca
Libros y miembrosPréstamo de librosPractica por tu cuenta: Compilador de Ruby online