No artigo de hoje vou abordar sobre o operador =, e o motivo dele ser perigoso em customizações se você não conhecer o conceito por trás dele (e que ele na verdade serve para atribuição de valores).
Há um tempo atrás, eu fiz um artigo explicando que o = e o == são diferentes (e podem trazer resultados diferentes), e que devemos sempre tentar optar pelo == nas boas práticas (caso queira se aprofundar, clique aqui para ver o artigo).
Mas o que poucos sabem, é que o operador com apenas 1 sinal de igual, também serve para atribuição! Isso mesmo, atribuir valores.
Eu estava conversando com meu grande amigo Daniel Buceli, e ele havia me perguntado sobre o atribuidor = ser de atribuição, e eu confesso que desconhecia que ele tinha esse propósito, ai fui no TDN e constatei que a explicação dizia que o operador = é um operador de atribuição simples (TDN – Operadores de Atribuição).
Então fui realizar um teste, montei um fonte onde eu fazia uma atribuição de valor com := e em seguida eu usava =, e sim jovens, ele alterou o valor da variável. Abaixo um print do teste:
Então, o que podemos concluir é que, para não se confundir, e adotar como boas práticas em nossos códigos, é abolir o uso do operador =, para que não haja confusão se é uma atribuição simples ou um teste simples numérico.
Resumidamente, o que eu indico aos meus alunos como boas práticas, devemos optar por:
- Quando for atribuição, usar o operador :=
- Quando for testes de comparação igual, usar o operador ==
Caso você queira simular o teste que fizemos, abaixo segue o código fonte:
//Bibliotecas
#Include "TOTVS.ch"
/*/{Protheus.doc} User Function zOperad
Exemplo utilizando o operador = para atribuição
@type Function
@author Atilio
@since 09/07/2021
/*/
User Function zOperad()
Local aArea := GetArea()
Local nTotal := 0
Local cNome := ""
Local cTexto := ""
//Atribuição normal com :=
nTotal := 10
cNome := "Daniel"
cTexto += "[1] nTotal = " + cValToChar(nTotal) + ", cNome = " + cNome + CRLF
//Atribuição com apenas =
nTotal = 200
cNome = "Atilio"
cTexto += "[2] nTotal = " + cValToChar(nTotal) + ", cNome = " + cNome + CRLF
//Mostrando o resultado
MsgInfo(cTexto, "Atenção")
RestArea(aArea)
Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.
