Découvrir les opérateurs de test et de conversion de type pour les interfaces

Effectué

Dans le langage AL, vous pouvez définir des interfaces, à savoir un contrat syntaxique pouvant être implémenté par une méthode non abstraite. Depuis la 2e vague de lancement 2024 de Business Central, vous pouvez également étendre une interface, ce qui permet une conception plus flexible et plus adaptable. Pour en savoir plus, consultez Extension d’interfaces dans AL.

En ce qui concerne l’extensibilité des interfaces, il est utile de pouvoir tester et convertir des types d’interfaces. Deux nouveaux opérateurs, « is » et « as », ont été ajoutés pour faciliter ces opérations. Le mot clé « is » vérifie si une interface est d’un type spécifique, ce qui est utile pour garantir la sécurité des types dans le code. Le mot clé « as », quant à lui, tente de convertir une interface en une autre interface. Ces opérateurs améliorent l’extensibilité et l’utilité des interfaces dans AL et s’alignent sur la pratique de programmation plus large qui consiste à garantir que les systèmes sont créés en tenant compte de la croissance et de l’adaptabilité futures, permettant des mises à jour et une maintenance faciles.

Test de type avec l’opérateur « is »

Les tests de type avec l’opérateur « is » sont utiles lors de l’extension d’interfaces, car ils vous permettent de tester si une instance d’une interface ou le contenu d’une variante prend en charge une interface spécifique.

Voici la syntaxe à utiliser pour le mot clé « is » :

procedure TestInterface(intf: Interface IFoo)
begin
    if intf is IBar then
        Message('I also support IBar');
end;

You can also use the is operator with variants:
al-languageCopy
procedure TestVariant(v: Variant)
begin
    if v is IBar then
        Message('I support IBar');
end;

Conversion avec l’opérateur « as »

L’opérateur « as » permet de convertir une instance d’une interface en une interface spécifique. Si l’interface source n’implémente pas l’interface cible, le système génère une erreur lors de l’exécution.

Prenons un exemple :

procedure CastInterface(intf: Interface IFoo): Interface IBar
begin
    exit(intf as IBar); // Throws an error if 'intf' doesn't implement 'IBar'
end;

De même, le mot clé « as » fonctionne avec des variantes :

procedure CastInterface(v: Variant): Interface IBar
begin
    exit(v as IBar); // Throws an error if 'v' doesn't implement 'IBar'
end;