Hoje vou mostrar uma dica que poucos analistas sabem quando programam condições em AdvPL.
Nos operadores relacionados (citados nesse link do TDN – https://tdn.totvs.com/display/tec/Operadores+Comuns), temos que o == é o Exatamente Igual, e o = é apenas Igual, mas existe diferença real entre eles?
Sim jovens, existe! Basicamente, o = é indicado para se utilizar com variáveis numéricas, já o == é para variáveis texto por comparar exatamente o resultado final. Na prática, ao utilizar apenas =, o seu programa em um if pode ser que ele entre dentro da condição e isso atrapalhe o andamento do seu programa.
Ah Daniel, mas eu nunca vi isso acontecer, e mesmo assim, o que você me indica? Pois bem jovens, o que eu indico para meus alunos, inclusive no curso de Lógica em AdvPL eu citei isso, é para sempre usar o == para não ter imprevistos e surpresas.
Para quem quer realizar um teste simples, abaixo segue um código fonte com o mesmo if, porém um com = e outro com ==, nos testes que realizei (em cerca de 2 a 3 instalações diferentes do Protheus), ele entra no primeiro if mesmo as expressões sendo diferentes.
//Bibliotecas #Include 'Totvs.ch' /*/{Protheus.doc} User Function zTst Exemplo de comparacao entre = e == @author Atilio @since 11/03/2020 @version 1.0 @type function /*/ User Function zTst() Local aArea := GetArea() //Primeiro teste com apenas 1 = If "ZZZZ" = "ZZZ" Alert("Caiu no primeiro If - apenas 1 =") EndIf //Segundo teste com 2 = If "ZZZZ" == "ZZZ" Alert("Caiu no segundo If - 2 =") EndIf RestArea(aArea) Return
Além disso em outra documentação do TDN, eles falam que o operador = também serve para atribuição, o que pode ser muito perigoso para as customizações. Veja a documentação em https://tdn.totvs.com/pages/viewpage.action?pageId=6063089 .
Bom pessoal, por hoje é só.
Abraços e até a próxima.