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