Olá, Visitante!
Páginas: [1]   Ir para o Fundo

Autor Tópico: [Ruby] Aula 9 - Try & Catch  (Lida 452 vezes)

0 Membros e 1 Visitante estão vendo este tópico.

  • *
  • Mensagens: 2395 Ouro: 1747

    Medalhas:
    Vencedor CRM Awards - Melhor Scripter Vencedores das edições do Concurso Projeto Rickas!

    • Ver perfil
    • E-mail
[Ruby] Aula 9 - Try & Catch
« Online: 01 Ago 2014, 15:13 »
Índice das aulas básicas
Índice das aulas avançadas
Índice das aulas de algoritmos
Try and Catch
Conhecimento necessário : médio
Introdução

Bom, essa é a nona aula, e ela já começa a tratar de assuntos mais avançados sobre a programação, por isso ela requer que saiba boa parte das aulas anteriores.

A aula atual é o famoso "try and catch", o "try and catch" é um tratamento em relação a erros no programa, ou seja ele é especificamente feito visando o contorno ao erro que será gerado. Como sabem, a essa altura já devem ter programado alguma coisa em Ruby ou outra linguagem, e várias vezes devem ter se deparado aos erros, e não digo erros de sintaxe, e sim erros de objetos, métodos, ou erros de lógica que o programa executa. Um exemplo bem clássico:
Uma variável a tem valor 5, a variável b tem valor 0, e o seu código divide a por b.
a/b
Nesse momento o seu programa "explode", pois a divisão de algo por 0 é impossível, assim fechando toda a execução dele. Nesse caso pode ser contornado? Pode, mas esse é um exemplo bem simples, muitas vezes temos o famoso stack error, e outros problemas que são muito complicadas e demoradas tentar contornar esses erros. Nesse momento entra o try and catch, como diz o nome, ele "tenta" executar, e caso não consiga ele captura algo diferente, um pouco semelhante ao if e else.

No Ruby

   No Ruby a escrita difere das linguagens mais usuais como C# por exemplo, ao invés de try, catch e finally, no Ruby temos begin, rescue e ensure, mas que tem o mesmo principio.
Vamos a programação :)
Escreva o seguinte código.
Código: [Selecionar]
a = 5
b = 0
p a/b

E como esperado terá o erro e o fechamento do programa, dizendo que não se pode dividir por 0.

mas apresentamos a estrutura do begin rescue e ensure.
Código: [Selecionar]
begin
    # Aqui seu código de teste
    rescue
    # Aqui o código caso o teste falhe
    ensure
    # Aqui o código que sempre será executado, independente se falhar um ter sucesso
end

Então colocando nossa divisão por 0

Código: [Selecionar]
begin
    a = 5
    b = 0
    p a/b # sua divisão por 0, Esse código não irá executar
    rescue
    p "Não dividirás por zero"
    ensure
    p "Fim do código"
end

Ou seja, o seu código deixa de executar, pois ele gera um erro, esse erro fica gravado na variável global $! ou seja você pode também saber o que causou o erro, desse modo.
Código: [Selecionar]
begin
    a = 5
    b = 0
    p a/b # sua divisão por 0
    rescue
    @error_message="#{$!}"
    p @error_message
    ensure
    p "Fim do código"
end
claro que se mudar a variável e se tornar um código executável, o que será executado vai ser o código e não o que está dentro do bloco rescue, por exemplo.
Código: [Selecionar]
begin
    a = 5
    b = 1
    p a/b # sua divisão pode ocorrer
    rescue
    @error_message="#{$!}" # Esse bloco não será executado
    p @error_message
    ensure
    p "Fim do código"
end

Finalizando

  Esse é um bloco muito utilizado em tratamento de erros e em casos cujo se torne mais fácil tentar e capturar do que um modo a dar a volta pelo código para que não ocorra o erro. O tratamento de erro nada mais seria do que buscar o erro no programa e ai então sabendo do erro buscar um modo de resolve-lo, mas sem atrapalhar a execução restante do programa. Dito isso então tem 2 usos muito importantes na programação, e agora chegamos ao fim dessa aula, em breve mais novas aulas :)
« Última modificação: 16 Dez 2015, 10:29 por Raizen »

  • *
  • Mensagens: 204 Ouro: 104
  • ...
    • Ver perfil
Re: Aula 9 - Try & Catch
« Resposta #1 Online: 01 Ago 2014, 16:22 »
Excelente aula de como utilizar a expressão begin/rescue/ensure/end, mas acho que o nome do tópico um pouco inadequado pois pode confundir as pessoas (como eu) achando que era sobre catch/throw. Também acho que poderia explicar pro pessoal sobre o raise que pode ser usado nessa expressão, no mais excelente aula.

  • *
  • Mensagens: 2395 Ouro: 1747

    Medalhas:
    Vencedor CRM Awards - Melhor Scripter Vencedores das edições do Concurso Projeto Rickas!

    • Ver perfil
    • E-mail
Re:  Aula 9 - Try & Catch
« Resposta #2 Online: 01 Ago 2014, 16:30 »
Excelente aula de como utilizar a expressão begin/rescue/ensure/end, mas acho que o nome do tópico um pouco inadequado pois pode confundir as pessoas (como eu) achando que era sobre catch/throw. Também acho que poderia explicar pro pessoal sobre o raise que pode ser usado nessa expressão, no mais excelente aula.
AH pods crer, alias era bom eu colocar tudo isso nessa aula, vou dar uma modificada e implementar a aula um pouco xD, eu ia fazer isso mas acabei mandando assim, vlws manolo você é o cara :D

Páginas: [1]   Ir para o Topo
 

SMF 2.0.2 | SMF © 2013, Simple Machines | Mobile View
© Centro RPG Maker - Alguns direitos reservados.
Layout por Uhtred