[fpc-pascal] methods of an object to create others objects
Martin
fpc at mfriebe.de
Thu Dec 2 19:49:14 CET 2010
On 02/12/2010 18:26, David Emerson wrote:
>> Wouldn't it be nice if we had a try..except..finally statement
>> supported in FPC. All-in-one.
> We do: it is called "try try"
>
> try try
> // ...
> except
> // ...
> finally
> // ...
I wonder where the *big* advantage of this "try..except..finally" is?
Looking at your code above there are 2 (simplified) cases.
1) you handle the exception in the except case, and it is ot re-risen
2) you re-raise it again
Variations of the 2 above:
3) a combination: sometimes handle,sometimes raise
4) the need to cover a new exception that may arise while handling the
first exception
Lets look at them:
1)
try
DoDangerousStuff;
except
FixTheDamege
end;
DoYourFinalizationStuff;
Since any exception is handled, and no new exception is risen in the
except block, the code after the except block is *always* executed. It
does not need a "finally" statement.
2) re-raise the exception
try
DoDangerousStuff;
except
DoYourFinalizationStuff;
LogTheExceptionAnd_Raise_ItAgain
end;
DoYourFinalizationStuff;
In case of an exception, the 2nd "DoYourFinalizationStuff;" is not
called. To avoid code duplication, you would have to put the code into a
local subroutine.
But yes, in this ase, an extra finally may be slighly more readable
3 and 4 are handled in the same way as 2.
Additionally, if your finalization code is only "FreeAndNil(SomeVar)",
then you can add it in and after the exception block, and even allow it
to run twice. The 2nd run does no damage.
my 2 cents
Martin
More information about the fpc-pascal
mailing list