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

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan Atilio (Daniel Atilio)
Especialista em Engenharia de Software pela FIB. Entusiasta de soluções Open Source. E blogueiro nas horas vagas.

Deixe uma resposta