[erlang-questions] How do I elegantly check many conditions?

Richard Carlsson <>
Wed Mar 25 15:35:09 CET 2009


Hynek Vychodil wrote:
> If I have function like
> 
> is_new_email(Email) ->
>  case mnesia:dirty_read(email, Email) of
>    []    -> ok;
>    _Else -> email_in_use
>  end.
> 
> I can choose if use it as
> 
> case is_new_email(Email) of
>   ok -> do_something();
>   email_in_use -> do_something_other()
> end
> 
> or as
> 
> ok = is_new_email(Email);
> 
> When You trow exception, I can't choose.

Of course you can choose. If you have:

  check_new_email(Email) ->
    case mnesia:dirty_read(email, Email) of
      []    -> ok;
      _Else -> throw(email_in_use)
    end.

you can use it as

  try check_new_email(Email) of
    ok -> do_something()
  catch
    email_in_use -> do_something_other()
  end

or as

  check_new_email(Email)

One advantage of this variant is that if the exception falls
through, you can find out that it was thrown from new_email()
rather than just seeing a badmatch in the calling function.

That doesn't mean that I'd use exceptions for the OP's
original question. Maybe, but not necessarily.

    /Richard




More information about the erlang-questions mailing list