[erlang-questions] How do I elegantly check many conditions?
Taavi Talvik
taavi@REDACTED
Fri Mar 20 15:18:55 CET 2009
On Mar 20, 2009, at 3:20 PM, ryeguy wrote:
> So when a user sends a request to register an account, they send their
> username, password, email, and other info. The registration function
> must verify all of their data. An example would be:
>
> - verify email not in use
> - verify username not in use
> - verify username is alphanumeric
> - verify all fields are above X characters long
> - verify all fields are less than Y characters long
>
> Now I don't want to have a 5 level deep if or case statement, but what
> other options do I have? Splitting it into separate functions sounds
> like a good idea, but then I just have to check the return value of
> the functions in some sort of conditional and it's back to the
> original problem.
>
> I could separate them into functions and then call an if statement
> with all of the conditionals OR'd together, but that wouldn't give me
> what I want because I need to be able to tell the user the specific
> error if there was one.
>
> How does one handle this kind of situation in erlang?
Something lake following:?
check_everything(..) ->
try
ok = do_tests(Data, [fun email_not_in_use/1, fun
username_not_in_use/1, ..])
catch
throw:{bad_user, ErrorString} -> show_error_to_user(...)
end.
do_tests(Data, []) -> ok;
do_tests(Data, [F|T]) ->
ok = F(Data),
do_tests(Data, T).
% and tests here...
email_not_in_use({Username, _,_,_.....}) ->
case ... of
in_use -> throw({bad_user, "Username allready in use"});
_ -> ok
end.
best regards,
taavi
More information about the erlang-questions
mailing list