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.