Puoi risparmiare un po 'di tempo e di memoria non dovendo costruire e valutare una tupla se si restituisce un atomo nudo. Scrivi un punto di riferimento, esegui diversi milioni di passaggi e lo saprai di sicuro.
A parte questo, non ha molta importanza:
handle_result(true) -> do_true_things();
handle_result({false, Reasons}) -> do_false_things(Reasons).
some_function() -> handle_result(is_user_name_allowed("bob")).
La prima versione della funzione funzionerebbe allo stesso modo se fosse stata specificata come handle_result({true})
e is_user_name_allowed()
restituita una tupla.
Più importante è l'aspetto della sicurezza. Assicurati di utilizzare il matcher per gestire il risultato, che ti darà un controllo implicito che era valido senza doverlo fare dopo ogni chiamata. Se qualcosa va storto, un errore function_clause
lo porterà alla tua attenzione.
Quello che vorrei non fare è restituire una tupla che è sempre strutturata allo stesso modo:
{true, []}
{false, ["Ugly", "Mother dresses him funny"]}
Sebbene tu possa abbinarli, lascia aperta la possibilità che un chiamante faccia ...
{Result, Reasons} = is_user_name_allowed("bob")
... e non convalidare il risultato.