[box class=windowbg1]
Índice das aulas básicas
- Aula 1 - Introdução (http://centrorpg.com/index.php?topic=198.0)
- Aula 2 - Objetos (http://centrorpg.com/index.php?topic=205.0)
- Aula 3 - Operações (http://centrorpg.com/index.php?topic=1218.0)
- Aula 4 - Condições (http://centrorpg.com/index.php?topic=2504.0)
- Aula 5 - Repetição (http://centrorpg.com/index.php?topic=2870.0)
- Aula 6 - Arrays (http://centrorpg.com/index.php?topic=523.0)
- Aula 7 - Hashes (http://centrorpg.com/index.php?topic=589.0)
[/box]
[box class=windowbg1]Índice das aulas avançadas
- Aula 8 - Superclasses e instâncias (http://centrorpg.com/aulas-para-rgss/superclasse-herancas-e-instancias/)
[/box]
[box class=windowbg1]Índice das aulas de algoritmos
- Aula 1 - Sort (http://centrorpg.com/aulas-para-rgss/algoritmo-1-otrs-gt-sort/)
- Aula 2 - Busca (http://centrorpg.com/aulas-para-rgss/algoritmo-2-busca/)
- Aula 3 - Recursividade (http://centrorpg.com/aulas-para-rgss/recursividade/)
[/box]
[box class=windowbg]Try and Catch
[/box]
Conhecimento necessário : médio
[box class=windowbg]Introdução
[/box]
[box class=windowbg2]
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.
[/box]
[box class=windowbg]No Ruby
[/box]
[box class=windowbg2]
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.
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.
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
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.
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.
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
[/box]
[box class=windowbg]Finalizando
[/box]
[box class=windowbg2]
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 :)
[/box]
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.
Citação de: Azraven online 01/08/2014 às 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.
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