Dúvidas básicas de Ruby

3 respostas
von.juliano
Olá pessoal, estava fazendo um programa simples em Ruby quando me deparei com algumas dificuldades. Vamos lá:
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
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!

3 Respostas

Adriano_Almeida

Von,

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? :wink:

Outra coisa, não precisa colocar os “()” na declaração do seu método e nem na chamada dele.

von.juliano

Oi pafuncio, vlw pelas dicas, vamos lá:

Como assim adicionar o enter? Imaginei que seria uma String vazia!

Outra coisa… utilize os padrões de nomenclatura…

métodos sempre underscored, ou seja, verificaCadeia ficaria verifica_cadeia.

Outra coisa, não precisa colocar os “()” na declaração do seu método e nem na chamada dele.


Sabe como é… força do hábito! :XD:

Autômato Finito, essa classe é um exercicio que eu fiz outro dia, resolvi fazer em Ruby, só pra exercitar! :smiley:

Quanto ao problema do catch, sabe por que acontece? Alias, qual é o método correspondente ao charAt do java?

Vlw! :thumbup:

Adriano_Almeida

von.juliano:
Oi pafuncio, vlw pelas dicas, vamos lá:
Como assim adicionar o enter? Imaginei que seria uma String vazia!

Normal, direto esqueço também.

Criado 15 de abril de 2008
Ultima resposta 15 de abr. de 2008
Respostas 3
Participantes 2