Olá pessoal.
Estou estudando ruby a pouco tempo e no momento estou lendo o livro “O Programador Pragmático”.
Neste livro encontrei um exercício onde pede-se para construir um interpretador de comandos bem simples onde o importante é que seja fácil adicionar novos comandos nesta “minilinguagem”.
Criei o programa abaixo mas acho que ele pode ser escrito de forma bem melhor usando recursos mais elaborados que o ruby oferece.
Gostaria de ver outras idéias de programadores ruby com mais experiência e também de receber críticas sobre este código.
Caso este tópico for noob demais, peço desculpas galera.
Valeu.
class Interpreter
def initialize
@cmds = Commands.available_commands
end
def execute
c = Commands.new
while (true)
input = gets()
tmp = input.split(" ")
cmd = tmp[0] # comando
prm = tmp[1] # parametro
if c.respond_to? @cmds[cmd][1]
c.send(@cmds[cmd][1], prm) if @cmds[cmd][0]
c.send(@cmds[cmd][1]) unless @cmds[cmd][0]
else
puts "comando nao suportado"
end
end
end
end
# comandos disponíveis - para mais comandos adicionar métodos
class Commands
def self.available_commands
{ "P" => [true, :doSelectPen],
"D" => [false, :doPenDown],
"U" => [false, :doPenUp] }
end
def doSelectPen(size)
puts "selected pen #{size}"
end
def doPenDown
puts "down pen"
end
def doPenUp
puts "up pen"
end
end
# inicia a execução do programa
i = Interpreter.new
i.execute