Olá pessoal, estava fazendo um programa simples em Ruby quando me deparei com algumas dificuldades. Vamos lá:
[code]class AF
def AF.verificaCadeia()
puts "Informe a cadeia:"
cadeia = gets
raise "Informe a Cadeia!" if cadeia.empty? || cadeia.nil?
#throw :vazio if cadeia.empty? || cadeia.nil?
for i in (0...cadeia.length - 1)
puts cadeia[i]
end
end
catch :vazio do
puts “Informe a Cadeia!”
end
end
begin
AF.verificaCadeia()
rescue StandardError => ex
puts "Erro: #{ex}"
end[/code]
Só aí já tenho várias dúvidas:
:arrow: A parte comentada, referente ao throw e ao catch, a idéia é lançar a exceção no caso do valor estar vazio, porém se eu descomentar essa parte (e comentar a linha do raise), o bloco catch sempre é executado ANTES mesmo de informar os dados. Pq isso acontece?
:arrow: As comparação cadeia.empty? e cadeia.nil? SEMPRE me retornam false, independente do valor informado.
:arrow: A forma como fiz o for e o raise estão corretas? Quero dizer, essa é a melhor forma de se fazer?
São dúvidas básicas, mas tô apanhando! :XD: Obrigado pessoal!
o “gets” vai adicionar dentro do resultado dele o enter, portanto, nunca ele será nil ou empty. O seu uso do raise até está correto. No final das contas ficaria mais ou menos assim.
Outra coisa… utilize os padrões de nomenclatura…
métodos sempre underscored, ou seja, verificaCadeia ficaria verifica_cadeia. Dê nomes mais legíveis pra classe, afinal, que raios é AF?
Outra coisa, não precisa colocar os “()” na declaração do seu método e nem na chamada dele.