Una de las características de Ruby es tener varias formas de hacer las mismas cosas. Para acceder a los atributos de una clase vimos en el concepto anterior que debemos definir un método que retorne el valor del atributo y otro que modifique su contenido.
Ahora veremos otra sintaxis que Ruby nos proporciona para la creación de estos métodos.
Confeccionar una clase que represente un empleado. Definir como atributos su nombre y su sueldo.
En el bloque principal del programa definir dos objetos de la clase Empleado e imprimir el nombre del empleado con sueldo mayor, además fijar su sueldo con el valor 1000.
class Empleado
attr_accessor :sueldo
def initialize (nombre, sueldo)
@nombre = nombre
@sueldo = sueldo
end
def imprimir
puts "Nombre: #{@nombre}"
puts "Sueldo: #{@sueldo}"
end
end
empleado1 = Empleado.new "juan", 500
empleado2 = Empleado.new "ana", 700
empleado1.imprimir
empleado2.imprimir
if empleado1.sueldo < empleado2.sueldo
empleado1.sueldo = 1000
elsif empleado2.sueldo < empleado1.sueldo
empleado2.sueldo = 1000
end
puts "Luego de modificar sueldo"
empleado1.imprimir
empleado2.imprimir
puts Empleado.methods
Llamamos al método attr_accessor e indicamos el nombre del atributo como símbolo (es decir antecediendo el caracter :)
Luego Ruby se encarga de crear en forma transparente los dos métodos:
def sueldo
@sueldo
end
def sueldo=(sueldo)
@sueldo = sueldo
end
Como vemos reduce mucho el código cuando queremos acceder tanto para consultar como modificar un atributo.
Existen otros dos métodos llamados attr_reader y attr_writer.
El método attr_reader solo creará el método:
def sueldo
@sueldo
end
Y si llamamos al método attr_writer solo se creará el método:
def sueldo=(sueldo)
@sueldo = sueldo
end
Confeccionar una clase que represente un dado. Definir como atributo el valor del dado.
Permitir acceder al atributo solo para consultar su valor y no modificarlo.
Plantear un método llamado "tirar" que genere un valor aleatorio entre 1 y 6.
Definir dos objetos de la clase Dado y mostrar la suma de los dos dados.
class Dado
attr_reader :nro
def initialize
@nro = 1
end
def tirar
@nro = rand(6) + 1
end
def imprimir
puts "Valor del dado #{@nro}"
end
end
dado1 = Dado.new
dado2 = Dado.new
dado1.tirar
dado1.imprimir
dado2.tirar
dado2.imprimir
suma = dado1.nro + dado2.nro
puts "La suma de los dos dados es #{suma}"
En este problema queremos que el atributo @nro solo se tenga acceso para consultar su valor y no modificar, entonces llamamos a attr_reader e indicamos el nombre del atributo (tener en cuenta que ponemos : en lugar de @):
attr_reader :nro
ejercicio143.rb
class TablaMultiplicar
attr_writer :tabla
def initialize
@tabla = 2
end
def imprimir
puts "Tabla del #{@tabla}"
for x in 1..10
valor = @tabla * x
puts "#{x} * #{@tabla} = #{valor}"
end
puts "*" * 50
end
end
t = TablaMultiplicar.new
t.imprimir
t.tabla = 5
t.imprimir
t.tabla = 9
t.imprimir