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

Nick Gerakines nick@REDACTED
Fri Mar 20 15:13:34 CET 2009

In the past, I've done things like this:

[untested pseudo-code] ...

create_user(Name, Email, ...) ->
    case validate_user({Name, Email, ...}, [user_name, user_email,
user_password, ...]) of
        true -> do_it();
        {error, X} -> expose_error();
        _ -> oh_no()

validate_data(UserDetails, []) -> true;
validate_data(UserDetails, [user_name | Rules]) ->
    case fcall_to_assert_name_is_ok(UserDetails) of
        true -> validate_data(UserDetails, Rules);
        _ -> {error, name_taken}
validate_data(...) -> ...

It's clean and gives you a quick way to determine which rules to use
for a given data validation block.

# Nick Gerakines

On Fri, Mar 20, 2009 at 6:20 AM, ryeguy <ryeguy1@REDACTED> 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?
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://www.erlang.org/mailman/listinfo/erlang-questions

More information about the erlang-questions mailing list