DNATech :: Dicas de código :: Operadores de Comparação em String

_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

Postagens mais visitadas