16 novembro 2005

Aula de 14-15/Nov/2005, 2ª-3ªFeira - ON GOTO (Demonstração)

Module Module1
#Region "Caso 1"
Sub Mensagem(ByVal ParamArray S() As String)
Dim Frase As String
If S.Length = 0 Then
Err.Raise(1000, , "Mensagem sem texto")
Else
'MsgBox(S.GetLength(0))
For I As Integer = 0 To S.GetLength(0) - 1
Frase = Frase & S(I)
Next
End If
Console.WriteLine(Frase) ' Porque é que esta instrução fica fora do IF?

Exit Sub ' Para que serve esta instrução?
Handler_Msg:
Select Case Err.Number ' Veja como é possível centralizar o tratamento de erros
Case 1000
Console.WriteLine("Aconteceu um erro:")
Frase = "Causa do erro: " & Err.Description
End Select
Resume Next
End Sub

Sub Caso1()
' CASO 1
Mensagem("========== ", "Caso 1A", " ==========")
Console.ReadLine()
Mensagem("========== Caso 1B ==========")
Mensagem()
' Conclusão:
' Mensagem não não dispõe de Suporte Contra erros (Error Handler)
' pelo que não resiste ao RunTime Error
End Sub
#End Region

#Region "Caso 2"
Sub Msg(ByVal ParamArray S() As String)
Dim Frase As String
On Error GoTo Handler_Mensagem ' Criar o Handler de Erros
If S.Length = 0 Then
Err.Raise(1000, , "Mensagem sem texto")
ElseIf S.Length > 3 Then
Err.Raise(1001, , "Excesso de argumentos")
Else
For I As Integer = 0 To S.GetLength(0) - 1
Frase = Frase & S(I)
Next
End If
Console.WriteLine(Frase)

Exit Sub
Handler_Mensagem:
Select Case Err.Number ' Veja como é possível centralizar o tratamento de erros
Case 1000, 1001
Console.WriteLine("Aconteceu um erro:")
Frase = "Causa do erro: " & Err.Description
' Case 1002 ...
' Case 1003 ...
End Select
Resume Next ' Poderia ser só "Resume" ?
End Sub

Sub Caso2()
' CASO 2
Msg("========== ", "Caso 2A", " ==========")
Msg()
Console.ReadLine()
'Msg("========== Caso 1B ==========")
'Msg()
' Conclusão:
' Msg não não dispõe de Suporte Contra erros (Error Handler)
' pelo que não sesiste ao RunTime Error
End Sub
#End Region

#Region "Caso 3"
Sub Caso3(ByVal X As Integer, ByVal Y As Integer)
On Error GoTo Handler_Caso3
Console.WriteLine(X \ Y)
Console.ReadLine()

Exit Sub
Handler_Caso3:
Console.WriteLine("Y igual a zero")
Resume Next ' Poderia ser só "Resume" ?
End Sub
#End Region

#Region "Caso 4"
Sub Caso4(ByVal X As Integer, ByVal Y As Integer)
On Error GoTo Handler_Caso4A ' 1º Handler
Console.WriteLine(X \ Y)
' Tirar o comentário à próxima linha. O que acontece? Porquê?
On Error GoTo 0
'Console.WriteLine(X \ Y)
Console.ReadLine()

Exit Sub
Handler_Caso4A:
Console.WriteLine("Y igual a zero")
Resume Next ' Poderia ser só "Resume" ?

End Sub
#End Region

#Region "Caso 5"
Sub Caso5(ByVal X As Integer, ByVal Y As Integer)
On Error GoTo Handler_Caso5A ' 1º Handler
Console.WriteLine(X \ Y)
On Error GoTo Handler_Caso5B ' 2º Handler
Console.WriteLine(Y \ X)
'''' Se se retirar o comentário da próxima linha,
'''' desactiva-se o Handler_Caso5B mas não se activa o Handler_Caso5A :
'''' não ficará nenhum activo !

'On Error GoTo 0
'Console.WriteLine(X \ Y)

Console.ReadLine()
Exit Sub
Handler_Caso5A:
Console.WriteLine("Y igual a zero")
Resume Next ' Poderia ser só "Resume" ?
Handler_Caso5B:
Console.WriteLine("X igual a zero")
Resume Next ' Poderia ser só "Resume" ?
End Sub
#End Region

#Region "Caso 6"
Sub Sub6A(ByVal X As Integer, ByVal Y As Integer)
Console.WriteLine(X \ Y)
End Sub
Sub Sub6B(ByVal X As Integer)
Console.WriteLine(X * X)
End Sub
Sub Sub6C(ByVal X As Integer)
On Error Resume Next ' Em vez de GOTO HANDLER_Sub6C...
Console.WriteLine(X * X)
Console.WriteLine("Deu erro!!!")
End Sub

Sub Caso6()
Dim X As Integer = 100000
Dim Y As Integer = 0
On Error GoTo Handler_Caso6
Sub6A(X, Y)
Sub6B(X)
Sub6C(X)

Exit Sub
Handler_Caso6:
Console.WriteLine("Erro matemático")
Resume Next
End Sub
#End Region
Sub Main()
'Caso1()
'Caso2()
'Caso3(5, 0)
'Caso4(5, 0)
'Caso5(5, 0) : Caso5(0, 5)
Caso6()
Console.ReadLine()
End Sub

End Module

1 Comments:

Anonymous Anónimo said...

Os alunos gostavam de ter os apontamentos em ficheiros de vb.net, ja não basta ter as aulas a correr numa turma que esta cheia e noutra meia duzia de alunos, nem parece ser coisa do prof premitir que isso aconteça.

9:42 da manhã  

Enviar um comentário

<< Home