_Créditos da imagem: ChatGPT
### Diferença entre `=` e `==` no AdvPL (e por que isso pega muita gente de calça curta)
No **AdvPL**, esses dois operadores parecem irmãos, mas na real vivem em planetas diferentes. E entender isso salva horas de debug maldito.
#### `=` → Comparação *com coerção*
O operador **`=`** faz comparação *flexível*. Ele tenta “ajustar” os valores pra ver se batem, mesmo quando não são exatamente iguais.
É o clássico “jeitinho brasileiro” do AdvPL: *se dá pra encaixar, ele encaixa*.
Exemplo:
```xbase
"5701" = "57" => .T.
```
Por quê?
Porque o Protheus compara **apenas até o tamanho da menor string**. (Fix.: Considerando o operando à direita do operador. O Inverso não é verdadeiro.)
Maiores referências: [SET EXACT](https://harbour.github.io/doc/clc53.html#set-exact-cmd)
Ou seja:
* "57" tem 2 caracteres
* "5701" tem 4
* Ele compara só "57" com "57"
* E diz: “Tá igual, né? Então toma `.T.`”.
Esse comportamento vem da tradição dos sistemas legadões, onde muitas strings representam campos fixos e só a parte inicial interessa. Funciona… mas engana.
#### `==` → Comparação *estrita*
Já o operador **`==`** não aceita gambiarra emocional.
Ele compara **tudo**: tamanho, conteúdo e integridade moral.
```xbase
"5701" == "57" => .F.
```
Porque, né… elas são *diferentes*. E aqui o AdvPL finalmente concorda com a lógica do universo.
---
### Quando usar cada um?
* **Use `=`** quando quiser comparar *prefixos*, códigos de tamanho variável, campos fixos ou quando você REALMENTE quer aproveitar o comportamento legado do Protheus.
(Mas pense duas vezes antes de cair nessa tentação...)
* **Use `==`** quando o que você quer é igualdade real, sem interpretação, sem jeitinho, sem máscaras.
*(É a escolha madura, tipo trocar IF…ELSE gigante por função que faz sentido.)*
---
### Veja um Exemplo
- No AdvPL, o operador "=" compara apenas até o tamanho
da menor string. Por isso:
```xbase
"5701" = "57" => .T.
```
- Já o operador "=="" realiza comparação estrita, caractere a caractere,
incluindo tamanho, resultando em:
```xbase
"5701" == "57" => .F.
```
#AdvPL, #Protheus, #TOTVS, #DesenvolvimentoAdvPL, #Programação, #DicaDeCódigo, #BoasPráticas, #QualidadeDeCódigo, #ERP, #DesenvolvedorTOTVS, #TechTips, #ComparaçãoDeStrings, #OperadoresLógicos, #DevCommunity, #CódigoLimpo
Torne-se um Sponsor:
🥊(дави)={0.5x[(Налдо)+(Алине)]}🥊
Comentários
Postar um comentário