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

Taavi Talvik <>
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