Entender operadores de teste e conversão de tipo para interfaces

Concluído

Na linguagem AL, você pode definir interfaces, que é um contrato sintático que pode ser implementado por um método não abstrato. Desde o ciclo de lançamentos 2 de 2024 do Business Central, você também pode estender uma interface, o que permite um design mais flexível e adaptável. Para obter mais informações, confira Estendendo Interfaces em AL.

Em conexão com a extensibilidade das interfaces, é útil ser capaz de fazer teste e conversão de tipo das interfaces. Dois novos operadores, "is" e "as", foram adicionados para facilitar essas operações. A palavra-chave "is" verifica se uma interface é de um tipo específico, o que é útil para garantir a segurança do tipo dentro do código. A palavra-chave "as", por outro lado, tenta converter uma interface para outra interface. Esses operadores melhoram a extensibilidade e a utilidade das interfaces em AL e se alinham à prática de programação mais ampla de garantir que os sistemas sejam criados com o crescimento e a adaptabilidade futuros em mente, permitindo atualizações e manutenção contínuas.

Teste de tipo com o operador "is"

O teste de tipo com o operador "is" é útil ao estender interfaces, pois permite que você teste se uma instância de uma interface ou o conteúdo de uma variante dá suporte a uma interface específica.

Veja a seguir a sintaxe para usar a palavra-chave "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;

Conversão com o operador "as"

O operador "as" é usado para conversão de uma instância de uma interface em uma interface específica. Se a interface de origem não implementar a interface de destino, um erro será emitido no runtime.

Por exemplo:

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

De modo semelhante, a palavra-chave "as" funciona com variantes:

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