Existe-t-il un moyen plus court d'écrire ceci:
case testvalue do
200 ->
true
404 ->
true
_ ->
false
end
Il renvoie vrai pour 200 ou 404 et faux pour tout le reste. Ce serait bien de l'écrire avec une condition OR mais cela conduit à une erreur:
case testvalue do
200 || 400 ->
true
_ ->
false
end
Il n'y a pas de syntaxe directe pour or
au milieu des modèles mais vous pouvez utiliser un garde:
case testvalue do
n when n in [200, 400] ->
true
_ ->
false
end
Vous pouvez également utiliser or
dans les gardes. Cela fonctionnera aussi mais est plus détaillé:
case testvalue do
n when n == 200 or n == 400 ->
true
_ ->
false
end
Les deux s'exécuteront aussi rapidement que in
à l'intérieur des gardes est converti en comparaisons + or
, comme mentionné dans le docs .
D'après mon expérience, il est plus logique dans elixir
de gérer les cas avec des fonctions/correspondance de modèle, c'est plus lisible lorsque votre base de code grandit.
Je ferais quelque chose comme ça:
defp valid_http_response?(200), do: true
defp valid_http_response?(400), do: true
defp valid_http_response?(_), do: false
Je suis d'accord que cela n'a pas vraiment de sens maintenant, mais à l'avenir, vous serez plus heureux :)
Pour ce cas spécifique, il serait peut-être préférable de renvoyer ce qui suit?
testvalue in [200, 400]
Par exemple:
def test_my_value(testvalue), do: testvalue in [200, 400]
Il sera évalué à true
ou false
comme prévu.
Une autre possibilité serait d'utiliser cond
:
cond do
testvalue in [200, 400] ->
true
true ->
false
end