moving general-purpose functions from httpd_util to stdlib
Chris Pressey
cpressey@REDACTED
Tue Apr 15 20:06:08 CEST 2003
Thanks, everybody.
But I have to apologize for that bad example. The 'error' is a red
herring that clouds the issue. The question is more about whether it is
wiser, in general, to write "open" or "closed" cases.
A (possibly) better example:
% "open" case
case A > B of
true ->
41;
_ ->
42
end
% "closed" case
case A > B of
true ->
41;
false ->
42
end
% "let-it-crash" style - seems almost like a different problem
case catch begin
true = A > B,
41
end of
{'EXIT', Reason} ->
42;
Result ->
Result
end
-Chris
On Tue, 15 Apr 2003 02:12:39 +0200
"Robert Virding" <robert.virding@REDACTED> wrote:
> ----- Original Message -----
> From: "Bengt Kleberg" <eleberg@REDACTED>
> To: <erlang-questions@REDACTED>
> Sent: Monday, April 14, 2003 8:08 AM
> Subject: Re: moving general-purpose functions from httpd_util to
> stdlib
>
>
> >
> > > Date: Mon, 14 Apr 2003 00:01:55 -0500
> > > From: Chris Pressey <cpressey@REDACTED>
> > ...deleted
> >
> > > This brings up one of those burning questions of our times - that
> > > is, what exactly "defensive programming" means in the context of
> > > Erlang.
> > >
> > > Say you have a function foo() that can return either an integer or
> > > the atom 'error'.
> >
> > an alternative to this problem is described by Richard Carlsson:
> >
> > - A function should *not* return wrapped values like
> > {ok,Value}/{error,Reason} to indicate success or
> > failure. The assumed behaviour should be success,
> > and failures should be signalled by exceptions,
> > as described below.
>
> I think I would try to qualify that a little more. It depends on what
> type of failure you mean. I would generally say that bad argument type
> or values should generate an exit so it is quite clear that Chris's
> hex conversion functions should only return the value and exit on
> failure. However, there are many cases where the non-success
> case does not really represent an error and then it should not
> generate an exit but use qualified return values like
> {ok,V}/{error,R}. Maybe the convention to use ok/error was badly
> chosen and we should have used yes/no but I think it would be
> worse to try and have two, or more, "conventions". Better to
> have one and try to explain how it is used.
>
> This is why most of the original, older libraries at least very rarely
> check arguments types and values but just assume they are
> correct and otherwise exit. As do most bifs. You can't do anything
> sensible if the arguments are all wrong.
>
> Another example would be file:open. As I envisaged when I wrote
> it was that if the arguments were of the wrong type or had illegal
> values ('creat') then it should exit. However, not being able to
> open the file I didn't really see as an error so it returned qualified
> values to indicate this. What it exactly does now I don't know.
>
> Not everyone agreed with me.
>
> Basically there are errors and errors.
>
> Robert
>
More information about the erlang-questions
mailing list