[erlang-questions] How do I elegantly check many conditions?
Adam Lindberg
adam@REDACTED
Mon Mar 23 13:39:40 CET 2009
----- "Hynek Vychodil" <vychodil.hynek@REDACTED> wrote:
> One of Joe's suggestion: program success case code separated from
> error
> handling. You can make it in this way
>
> create_user(Email, UserName, Password) ->
> try
> ok = new_email(Email),
> ok = valid_user_name(UserName),
> ok = new_user(UserName),
> ok = strong_password(Password),
> ...
> _create_user(Email, UserName, Password)
> catch
> error:{badmatch, email_in_use} -> do_something();
> error:{badmatch, invalid_user_name} -> do_something();
> error:{badmatch, user_exists} -> do_something();
> error:{badmatch, weak_password} -> do_something();
> ...
> end.
Why use badmatch?
create_user(Email, UserName, Password) ->
try
is_new_email(Email),
is_valid_user_name(UserName),
is_new_user(UserName),
is_strong_password(Password),
...
_create_user(Email, UserName, Password)
catch
email_in_use -> do_something();
invalid_user_name -> do_something();
user_exists -> do_something();
weak_password -> do_something();
...
end.
Validation functions can use throw:
is_new_email(Email) ->
case mnesia:dirty_read(email, Email) of
[] -> ok;
_Else -> throw(email_in_use)
end.
Cheers,
Adam
More information about the erlang-questions
mailing list