Ruby y las sillas del circo
Thursday, August 25th, 2005Una noche oscura, sin luna, en la epoca en que el Circo diambulaba por Japón, llegó a pagar su entrada un hombre misterioso. Era una mezcla entre el espÃritu amistoso de Mister Miagi y el lado peligroso de Hatori Hanso. El hermano, que desde los 7 años era el responsable de cobrar la entrada al circo, logró percibir que el japonés estába estudiando la forma en que se administraba el sistema de conteo de asientos y recaudación de la plata de las entradas. Todo eso fué en segundos. Pagó, entró, eso fué todo.
A la noche siguiente volvió el hombre y le dijo al hermano -Siempre usan esa hoja de exel y ese cuadernito para el conteo de platas y sillas? -SÃ, toda la vida- dijo el hermano. -Aburrido? – SÃ, toda la vida- respondió de nuevo. Sin ton ni son, a la velocidad de un ShaolÃn+Samurai, el hombre se aproximó al oÃdo del hermano y le habló unas palabras en secreto. Luego desapareció. El hermano se iluminó y luego rió.
Esa noche abrió su terminal y escribió un programita que manejara los asientos y las platas de cada noche:
class Seating
CHAIRS = 100
PRICE = 4
def initialize(date,place)
@date = date
@place = place
@money_made = 0
@chairs_available = CHAIRS
end
def enter(num_people)
num_people.to_i
@money = num_people*PRICE
if @chairs_available-num_people < 0
"Sorry, but there's not enough space inside. We're full."
else
@chairs_available -= num_people
@money_made += @money
"#{@chairs_available} chairs available, #{@money_made} dollars made for now"
end
end
def exit(num_people)
num_people.to_i
@chairs_available += num_people
"#{@chairs_available} chairs available, #{@money_made} dollars made for now, remember, we never refund the money."
end
def get_balance
"#{@money_made} dolars made up till now."
end
end
Al la noche siguiente, el hermano abrió su terminal y empezó a usar su primera Clase de Ruby en la vida. Entro en el irb (Interactive Ruby) e inició su objeto:
irb
irb> load "Seating.rb"
irb> todays_seating = Seating.new("18-02-2001","Okinawa")
irb le respondió con una sonrisa y luego estas palabras:
=> # <seating :0xb7dff5b0 @date="18-02-2001", @chairs_available=100, @money_made=0, @place="Okinawa">
Se aproximaron los primeros clientes. El hermano se puso nervioso porque no sabÃa si su programa funcionarÃa. Luego se calmó, recitando el mantra que aprendió la noche anterior ("wax on, wax off"). Era un hombre con su esposa y dos hijas. Bien, entran 4 personas.
irb> todays_seating.enter(4)
irb le responde:
=> "96 chairs available, 16 dollars made for now"
El hermano es ahora quien sonrÃe.
El programita estaba llevando la cuenta de las sillas disponibles y de la plata que llevaban acumulada hasta el momento!
Pero luego llegó el momento que el hermano tenÃa habÃa temido. Casi nunca pasaba, pero asà es la vida. Un bus lleno de viejitas chinas se detuvo frente a la carpa e hicieron fila para entrar. 99 viejitas hablando en japonés pidieron entrar al circo:
irb> todays_seating.enter(99)
=> "Sorry, but there's not enough space inside. We're full."
Voila! No hay campo.
Luego la noche anduvo asÃ:
irb> todays_seating.enter(12)
=> "84 chairs available, 64 dollars made for now"
irb> todays_seating.enter(6)
=> "78 chairs available, 88 dollars made for now"
Y casi al final del espectaculo, a consequencia de un pleito marido vs mujer, la pareja y sus hijas se van:
irb> todays_seating.exit(4)
=> "82 chairs available, 88 dollars made for now, remember, we never refund the money."
Jeje, el circo es pobre. El que paga, ya pagó. Pero los asientos sà se liberaron. Terminó la noche en paz, y listo para dormir, el hermano invocó el último método:
irb> todays_seating.get_balance
=> "88 dolars made up till now."
Apuntó el monto ganado. Listo. Todo bien.
Apuntó? No deberÃa el programa mantener los records de cada noche organizados? Ese programita lo escribirÃa esa misma noche. Se despidió, y se fué a la terminal.