Style question: returning error values from functions
Dar Scott
dsc at swcp.com
Sat Jul 12 08:29:01 EDT 2003
On Saturday, July 12, 2003, at 06:11 AM, Richard Gaskin wrote:
> When crafting a function it's often useful to provide info about any
> errors
> that occur within it.
Arg. Thought I answered on this list, but did on the other. I wrote
this:
> On Saturday, July 12, 2003, at 06:11 AM, Richard Gaskin wrote:
>
>> Which approach do you prefer? One of these? Something else?
>
> I use these:
>
> 1. Reshape the semantics so there are no errors.
> 2. Throw
> 3. Value returned in referenced variable and success/fail (or
> related) returned.
> 4. Separate domain validation functions (used before instead of
> after) with, perhaps, #2 or #10
> 5. Callback (very rarely for functions; I'll ignore this)
>
> Sometimes #1 is like your "error" prefix but not always. For example,
> char 5 of "abc" returns a reasonable value, empty, rather than an
> error. In this approach what is reasonable depends on the function.
> Another #1 approach is to define a way to coerce parameters to the
> nearest closest value. A general scheme can be used for numbers that
> uses rounding and bounding as needed.
>
> The callback might reduce to changing a global error to a local error.
>
> These are also acceptable to me:
> 6. Global
> 7. Function like sysError()
> 8. Error returned in referenced variable in parameters
> 9. Use NaN, +Inf, etc for numerical functions (like #1)
> 10. Let the function throw error or return garbage; used with #4
>
> Revolution built-in functions and operators use 1-3. Of #1 some
> return reasonable values and some coerce parameters to the function
> domain.
>
> I readily use throw in scripts for my own use. I also have used it in
> a library I will make generally available, and I'm thinking of
> changing the scripts so that they do not throw. Are people
> comfortable with throw?
>
> The value of functions is that you can use them in expressions. If
> you have to check after each use, then you lose the benefit. That
> makes #2 (throw) with perhaps #4 (data checking beforehand) more
> interesting.
Dar
************************************************************************
****
Dar Scott Consulting http://www.swcp.com/dsc/ Programming
Services
************************************************************************
****
More information about the use-livecode
mailing list