should postconditions be evaluated even if Exception is thrown?
Don
nospam at nospam.com
Thu Dec 3 10:25:07 PST 2009
Andrei Alexandrescu wrote:
> Walter Bright wrote:
>> Brad Roberts wrote:
>>> Walter Bright wrote:
>>>> Andrei Alexandrescu wrote:
>>>>> An exception (not an Error) is an expected and documented outcome of a
>>>>> function. After having listened to those endless Boeing stories,
>>>>> please listen to this one :o). Contract Programming covers the
>>>>> correctness of a program, and exceptions are correct behavior. By your
>>>>> very Boeing stories that I stoically endured, it seems like the
>>>>> logical conclusion is that postconditions must be evaluated upon
>>>>> exceptional return.
>>>> Consider a constructor. It's postcondition is the class invariant is
>>>> satisfied. If it throws, the object is not successfully constructed and
>>>> the invariant does not hold.
>>>
>>> If the constructor fails, the object never existed. Nothing to
>>> validate is valid.
>>
>> Right. And I can't see how you can validate the output of a function
>> that failed. Let's say your function sorts an array, and the post
>> condition is the array is sorted. So, what would the postcondition be
>> if it failed?
>>
>> out (result)
>> {
>> assert(failed || isSorted(result));
>> }
>>
>> ? What's the point?
>
> Very, very interesting example that actually makes my point very nicely.
>
> If the function doesn't throw, the postcondition is that the array is
> sorted.
>
> If the function does throw, the postcondition is that the array has not
> lost any element. So at least you know that information wasn't lost.
>
> I can't believe this is working so well in my argument :o).
I don't understand why you think that. I can't believe it adds any value
whatsoever.
It's just like checked exceptions, but with a much, much higher burden.
More information about the Digitalmars-d
mailing list