Você sabia que tem diferença entre = e == em AdvPL

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.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação