A programming convention

Ulf Wiger <>
Tue Jun 11 10:04:47 CEST 2002


On Tue, 11 Jun 2002, Samuel Tardieu wrote:

>I prefer Joe's solution: an exception should stay exceptional.
>The reason for that the compiler designers may choose to make an
>exception handler as cheap as possible ("zero cost") when no
>exception is raised, while an exception may take a lot of time
>to be processed when it is raised.

The only thing I did was to change the names around so that the
semantics of the code were consistent with Joe's actual
suggestion.

|    lookupQ(Key, Dict) ->
|       case (catch lookup(Key, Dict)) of
|          {'EXIT', Why} ->
|             {error, Why};
|          Other ->
|             {ok, Other}
|       end.


I guess what you're proposing is that the following example would
be more appropriate:

   lookup(Key, Dict) ->
      case lookupQ(Key, Dict) of
         {error, Why} ->
            exit(Why);
         {ok, Value} ->
            Value
      end.

which, of course, could be used as a general pattern:

  lookup(Key, Dict) ->
     no_maybe(lookupQ(Key, Dict)).
  lookupQ(Key, Dict) ->
     %% assuming that dict is a Key-Value list
     case lists:keysearch(Key, 1, Dict) of
        {value, {_Key, Value}} ->
           {ok, Value};
        false ->
           {error, not_found}
     end.

   %% the general utility function, which should be inlined
   %%
   no_maybe({ok, Value}) -> Value;
   no_maybe({error, Why}) -> exit(Why).

/Uffe
-- 
Ulf Wiger, Senior Specialist,
   / / /   Architecture & Design of Carrier-Class Software
  / / /    Strategic Product & System Management
 / / /     Ericsson Telecom AB, ATM Multiservice Networks






More information about the erlang-questions mailing list