[erlang-questions] Any wisdom to offer on "tagged return values"

Kevin <>
Fri May 1 23:17:06 CEST 2009


In the "programming rules" 
http://www.erlang.se/doc/programming_rules.shtml#REF32551


---snip--------------------------------------
Use tagged return values.

Don't program like this:

keysearch(Key, [{Key, Value}|_Tail]) ->
  Value; %% Don't return untagged values!
keysearch(Key, [{_WrongKey, _WrongValue} | Tail]) ->
  keysearch(Key, Tail);
keysearch(Key, []) ->
  false.

Then the {Key, Value} cannot contain the false value. This is the 
correct solution:

keysearch(Key, [{Key, Value}|_Tail]) ->
  {value, Value}; %% Correct. Return a tagged value.
keysearch(Key, [{_WrongKey, _WrongValue} | Tail]) ->
  keysearch(Key, Tail);
keysearch(Key, []) ->
  false.
</unquote>
---/snip--------------------------------------

But I'm skeptical, and the example is really a unique situation.  If 
this was followed slavishly, my code would be littered with {ok, blah},
and it would make "chaining" functions awkward, one(two(three(1))), 
which can really help clean up code.


Ironically in the lists man page it says keysearch is deprecated in 
favor of keyfind, which does exactly what the programming rules
cautions against.

keyfind(Key, N, TupleList) -> Tuple | false













More information about the erlang-questions mailing list