Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Metaprogramming

Erlang et Elixir, partie 4: flux de contrôle

by
Read Time:5 minsLanguages:
This post is part of a series called Introduction to Erlang and Elixir.
Erlang and Elixir, Part 3: Functions
Erlang and Elixir, Part 5: Phoenix Framework

French (Français) translation by New Lune (you can also view the original English article)

Si, sinon, les opérateurs logiques sont probablement la similitude la plus commune entre les langues populaires, et sans surprise Elixir les a également. Les macros if, case et cond sont fournies pour nous donner la structure de flux de contrôle.

Pour l'appariement des modèles, nous avons mentionné précédemment que le case d'utilisation fournit des correspondances contre tout motif itérativement:

Il convient de noter ici le _ cas, qui est essentiellement un cas de catch par défaut. Le cas peut également être utilisé avec un atom ou n'importe quel type de variable.

Expressions de la clause de garde

Elixir fournit de nombreux opérateurs pour vérifier notre expression en tant que garde contre la capture des mauvaises données. Par défaut, les éléments suivants sont pris en charge:

  • Opérateurs de comparaison (==,!=, ===, !==, >, >=, <, <=)
  • Opérateurs booléens (and, or, not)
  • Opérations arithmétiques (+, -, *, /)
  • Exploitants arithmétiques unaires (+, -)
  • L'opérateur de concaténation binaire <>
  • L'opérateur in en tant que le côté droit est une gamme ou une liste
  • Toutes les fonctions de vérification de type suivantes:
    • is_atom/1
    • is_binary/1
    • is_bitstring/1
    • is_boolean/1
    • is_float/1
    • is_function/1
    • is_function/2
    • is_integer/1
    • is_list/1
    • is_map/1
    • is_nil/1
    • is_number/1
    • is_pid/1
    • is_port/1
    • is_reference/1
    • is_tuple/1
  • Plus ces fonctions:
    • abs(number)
    • binary_part(binary, start, length)
    • bit_size(bitstring)
    • byte_size(bitstring)
    • div(integer, integer)
    • elem(tuple, n)
    • hd(list)
    • length(list)
    • map_size(map)
    • node()
    • node(pid | ref | port)
    • rem(integer, integer)
    • round(number)
    • self()
    • tl(list)
    • trunc(number)
    • tuple_size(tuple)

Nous pouvons les utiliser comme suit:

En outre, une fonction anonyme peut avoir plusieurs gardes. Par exemple, pour calculer un point de pivotement à partir d'une donnée de marché financier en utilisant les valeurs haute, basse et proche, nous pouvons le faire:

Ici, si la valeur élevée est inférieure à la valeur inférieure, la fonction anonyme pivot renverra un message d'erreur. Cette mode unique de garde d'écriture est phénoménalement puissante.

Cond

Comme une déclaration de switch, Elixir's cond est l'endroit où nous pouvons effectuer une chaîne de si autre chose comme des blocs et exécute sur le match.

À l'intérieur d'un bloc cond, tout est évalué à vrai sauf nil ou false. Ce sont toutes les valeurs numériques et les chaînes incluses.

Par exemple, nous pouvons vérifier l'état actuel des différentes possibilités avec un bloc cond:

Lorsque la valeur du statut est définie sur une chaîne, elle évaluera; sinon, un message d'erreur sera envoyé par défaut sur le dernier cas true.

If et Unless

Elixir nous fournit également avec unless, qui est une partie par défaut du bloc if else et peut être démontré comme tel:

Lorsque le cas if évalue comme vrai, unless vous permet d'avoir accès au contraire. Comme démontré, nous pouvons attraper l'autre côté du conditionnel de cette façon.

Dans un exemple réel, cela peut être utilisé pour afficher des informations conditionnelles lors d'une vérification conditionnelle, comme un rappel ou un indice.

Do/End Blocs

Tout au long de ces exemples, nous avons vu l'utilisation des macros do et end. Examinons-les de plus près avant de conclure cette section:

La virgule après true est pour la syntaxe régulière d'Elixir, où chaque argument est séparé par des virgules. Cette syntaxe utilise des listes de mots clés et, lorsqu'elle est utilisée conjointement avec else la macro, elle ressemblera à ceci:

Pour que ce soit plus agréable pour le développement, nous pouvons utiliser le bloc de do/end qui ne nécessite pas la virgule pour une approche directe:

Conclusion

Elixir a les structures de flux de contrôle familières if/else et case, et il a également unless et le bloc de do/end.

Nous pouvons réaliser toute logique grâce à la manipulation du flux de contrôle avec ces structures. Lorsque vous les utilisez en conjonction avec des macros, des fonctions anonymes et des modules, vous disposez d'une excellente option pour effectuer le travail.

Pour une lecture continue sur le sujet, le manuel fournit plus d'informations sur certaines des autres réserves d'utilisation du bloc de do/end, telles que les limitations de portée de la fonction.

Advertisement
Did you find this post useful?
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.