Hi all,
I wonder which one should I go for. The if approach looks straightforward, but not sure which one is most recommended practice for Elixir.
- if
def handle_event("guess", %{"number" => guess}, socket) do
current_score = socket.assigns.score
secret_number = socket.assigns.secret_number
{message, score} = check_guess(guess, current_score, secret_number)
{
:noreply,
assign(
socket,
message: message,
score: score
)
}
end
def check_guess(guess, current_score, secret_number) do
{guess_number, _} = Integer.parse(guess)
if guess_number == secret_number do
message = "You've won!"
score = current_score + 1
{message, score}
else
message = "Your guess: #{guess}. Wrong. Guess again"
score = current_score - 1
{message, score}
end
end
- function overloads - seems more codes than if approach, and kinda of repetitive
def handle_event("guess", %{"number" => guess}, socket) do
current_score = socket.assigns.score
secret_number = socket.assigns.secret_number
{message, score} = check_guess(guess, current_score, secret_number)
{
:noreply,
assign(
socket,
message: message,
score: score
)
}
end
def check_guess(guess_number, current_score, secret_number) do
{guess, _} = Integer.parse(guess_number)
score = update_score(guess, current_score, secret_number)
message = generate_message(guess, secret_number)
{message, score}
end
defp update_score(guess, current_score, secret_number) when guess == secret_number, do: current_score + 1
defp update_score(_, current_score, _), do: current_score - 1
defp generate_message(guess, secret_number) when guess == secret_number, do: "You've won"
defp generate_message(guess, _), do: "Your guess: #{guess}. Wrong. Guess again."
Besides that, what if I have nested if to cover more complex scenarios, any recommendations to write better?
Thank you.