按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
eter buffer into a series of string tokens。 Using safe exception coding; if the data could not be
parsed; you could throw an exception; or you could return a Nothing value indicating that the
buffer could not be parsed。
The caller code knows that there is the possibility of a Nothing value when calling Tokenize();
and thus has an If test to check for the Nothing value。 The If test is defensive coding; but it also
adds plexity because you need to verify for a Nothing value。
What if Tokenize() were a bit smarter and decided to return an empty array to indicate an
empty result set? The logic of this is not incorrect; because the caller expects either a result set
with items or a result set with nothing in it。 If a dramatically bad parsing error has occurred; the
only recourse is to throw an exception。 Here is the rewritten code:
Class DefaultStateRight
Private Function Tokenize(ByVal buffer As String) As String()
Return New String(…1) { }
End Function
Public Sub IterateBuffers(ByVal buffer As String)
Dim found As String() = Tokenize(buffer)
For c1 As Integer = 0 To found。Length 1
Console。WriteLine(〃Found (〃 & found(c1) & 〃)〃)
Next
End Sub
End Class
In the rewritten code; Tokenize() returns an empty array that; when iterated using a For
loop; will cause zero iterations。 This is exception…safe code with improved readability。
But what happens if Tokenize() does throw an exception? With Tokenize() throwing an
exception and the lack of a Try/Catch block in IterateBuffers(); it looks like IterateBuffers()
is written incorrectly。 However; IterateBuffers() is not written incorrectly; because Tokenize()
will throw an exception only if something really problematic has occurred。 A big problem is
beyond the scope of the IterateBuffers() method; and thus needs to be handled at a higher
level。 Think of it as the situation where you have a criminal case and the local municipal court
automatically delegates the case to the provincial or state level; because those courts are equipped
to deal with such a case。
…………………………………………………………Page 155……………………………………………………………
CH AP T E R 5 ■ L E AR N IN G AB O U T V I SU A L B AS IC E X CE PT I ON HA N D L IN G 133
Processing Errors That Are Warnings
One of the silliest things that programs do is exit when they could have continued working。 It
reminds me of when my family lived on the French Rivera; where it does not rain too often。 Our
two bulldogs were used to the nice weather; and at the slightest hint of moisture in the air; they
would refuse to go outside。 Our male dog Big Boss (Man) would stand in the doorway; stick his
nose out slightly; and take a few deep breaths。 If he sensed the slightest bit of moisture; instantly
you were dragging an 80…pound concrete block。
The point is that; like our bulldogs; programs sometimes overreact to situations。 For fear
of having problems or not doing something correctly; they instantly shut down。
Let’s say that you have a program that requires a configuration file to run。 What happens
when the configuration file does not exist? One approach is to panic and exit。 The panic approach
will work; but what if multiple problems follow from the first one? Then you are painstakingly
hitting one error after another。 Another approach is to use a default action。 In this example; the
default action could be to display a dialog box asking the user to select a configuration file; or
the program could create a default file; as in this example:
Try
LoadConfiguration()
Catch ex As ConfigurationException
CreateDefaultConfiguration()
End Try
Here; the LoadConfiguration() method is in a Try/Catch block; but the Catch block
catches only ConfigurationException failures (a built…in Visual Basic exception)。 If there is a
ConfigurationException failure; then a default configuration is created。 With a default config
uration; the program can continue processing。 Using the filtering capabilities of exceptions; if
another exception is thrown in LoadConfiguration(); then some higher…level exception
handler will process it。
When processing an error that is a warning; the important steps are to filter for the specific
exception and implement an appropriate exception handler that has been properly tested。 Don’t
try to implement a fix…all exception handler; because you will never be able to implement a
proper handler and thus will cause more problems。 In the handler to fix the problem; make
sure that you don’t generate an exception。 If you do; that exception will be sent to a higher
method caller。
The Important Stuff to Remember
In this chapter; you learned about errors and exceptions。 Here are the key points to keep in mind:
o Errors and exceptions will always occur in your programs。
o Your code is split into a tree very much like a management hierarchy。 The hierarchy
contains two types of code: code that organizes and code that implements。
o Exceptions are caught using Try/Catch blocks。
o The Finally block is used to execute code; regardless of whether an exception is thrown;
and to reset state。
…………………………………………………………Page 156……………………………………………………………
134 CH AP T E R 5 ■ L E A R N IN G AB OU T V I SU A L B AS IC E X C E P TI ON H AN D L IN G
o Code that implements has the responsibility of throwing exceptions。 Code that imple
ments does not tr