Executando verificação de segurança...
2

Um sistema de lógica de programação (Iniciante)

Opa, eae tranquilo?
Estou estudando Ruby epara exercitar um pouco do que eu aprendi fiz um sistema que calcula a idade canina do seu cachorro, tendo em mente que a cada 1 ano humano equivale a 5 anos (em média) para seu cachorro.
Abaixo está o código:

result = ''

loop do
    puts result

    puts "Escolha uma opção abaixo: "
    puts ""
    puts "1- Descobrir a idade canina do seu cachorro"
    puts "0- Sair"
    print "Opção: "
    opcao = gets.chomp.to_i

    if opcao == 1
        print("Qual a idade humana do seu cachorro? ")
        human_age = gets.chomp.to_i

        if human_age >= 1
            idade = human_age * 5
            result = "Seu dog tem #{idade} anos de idade canina"
        else
            break
        end
    elsif opcao == 0
        break
    else
        result = "Ops.. Opção inválida"
    end

    system "clear"
end


system "clear"

puts ""

puts "Muito obrigado! Volte sempre!!"
print "Qual o nome do seu cachorro? "

nome = gets.chomp.to_s
puts "Uau!! #{nome} é um nome lindo!"



Fiquem a vontade para dar palpites e dicas de código e de estudos, um abraço tmj!!

Carregando publicação patrocinada...
2

Não consigo ver um erro em nada, mas pode ser só porque eu mal acordei ainda :D Ou não ter domínio de Ruby. Não sei por exemplo o quanto o gets.chomp.to_i é o mais recomendado e todas as simplicações. Sei que pode dar erro e não está sendo tratado. Isso seria um erro? Depende dos requisitos.

Tem coisas que eu faria diferente porque não gosto como fez. Gosto não se discute. Embora o meu foi formado na minha experiência de 40 anos. Não quer dizer que seja melhor que o seu. Então considere que o seu está bom e não precisa mexer. Mas não custa questionar e tentar algo diferente para ver como se sente em relação a isto.

Não gostei de imprimir o resultado no começo do loop. Na verdade, nem gosto de criar uma variável neste caso, dá pra viver sem ela. gerenciar estado é sempre mais complicado. Só faria sentido em algo complexo e que precisaria de manutenção. Mesmo assim, eu não criaria até precisar. Um dos erros mais comuns que as pessoas fazem hoje em dia, porque ouvem muitos influencers é colocar complexidade em código sob a justificativa que fica mais "limpo". Tem até livro que ensina isso sobre seu código.

Provavelmente eu limparia a tela dentro do loop, no caso antes do break. Só por organização, para ficar mais simétrico. TOC ou facilitador?

Na verdade, pode ser mais simples mudar algo, mas pode violar o requisito. Eu não criaria um menu com duas opções, eu só pediria a informação e perguntaria depois se quer continuar. Ou melhor ainda, determine um valor padrão para a saída, por exemplo: "informe 0 para sair".

Assim, pode eliminar opção inválida e todo o if, ou pelo menos deixar só um simples para sair. Também dá para deixar o laço controlar em vez de ter um if.

Certamente eu adotaria todos identificadores em inglês ou português, misturar não faz sentido.

Quer tentar?

Também faltou uma IA para determinar se o nome é lindo ou não :P :D Se bem que em tempo tão modernos todas as IAs estão treinadas para só falar coisas positivas, por isso não podemnos confiar nelas.

Faz sentido para você?

Espero ter ajudado.


Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).

1

Valeu mano, é sempre bom ver as analises dos mais experientes pois a criticas construtivas.

Vou aplicar sim essas mudanças e depois te dou um feedback, vlw sucesso!!

1

Olá guerreiro!

Rodei seu código em um compilador online, e nenhum erro. Parabéns! Continue praticando e estudando!

Agora vem a parte ruim, depois do carinho vem o soco kkk. :)

Eu nunca programei em Ruby, mas o seu código me fez molhar o pé na praia do Ruby, obrigado!

Como eu havia dito, o código tá rodando no compilador sem nenhum erro, porém eu só mudaria algumas coisas, deixando mais conciso, sabe. Por exemplo:

No recorte do seu código (código abaixo), você coloca puts "". Não vejo necessidade, você pode usar o seguinte caractere especial '\n' que significa new line, um caracteres especial que usamos dentro do print. (Quando falo print, pense só na ideia de mostrar na tela). Poderia ficar assim:

    ...
    puts "Escolha uma opção abaixo: "
    puts "\n1- Descobrir a idade canina do seu cachorro"
    puts "0- Sair"
    ...

Iria ter o mesmo resultado. O mais interessante aqui, é o conhecimento mesmo, saber que existe um caracteres especial.

Dando continuidade, o if human_age >= 1 mais especificamente, o else, você como programador permitiu que o usuário digitasse 0. E acredite, o usuário vai digitar zero, e quando ele digita zero, simplesmente o código sai do loop, eu mudaria essa parte do código. Aqui o foco é na lógica e idealização do programa, não tá errado, tá errado na lógica de negócio, o usuário por algum motivo digitou zero. Então, seria mais coeso jogar um puts "Seu doguinho é muito novo, ainda tem poucos anos de vida!" ou fazer o cálculo, e não simplesmente sair.

Por fim, quando o usuário digita zero na opção de sair, acho que não é legal perguntar o nome do doguinho, quando você aperta fechar na navegador ou outro aplicativo você quer fechar, não quer perder muito tempo. Só deve aparecer coisas extremamentes importantes após isso, tipo "salvar o arquivo pois senão, irá perder todas as informações". Novamente, este não é um erro apenas uma questão de decisão mesmo.

Espero ter ajudado, é só isso mesmo! ;)

Desculpa os erros de digitação, e talvez a escrita objetiva (não é para ser arrogante).

Parabéns pela coragem! Continue.

1