De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.


Redução de expressões com operadores lógicos

Colaboração: Ricardo Takemura

Data de Publicação: 11 de março de 2016

Para quem fez informática: alguém se lembra de algumas aulas sobre redução de expressões lógicas? Sabia que dá para aplicar no código-fonte de uma aplicação?

Por exemplo, se eu tenho a condição:

  if (((x == 0) || (y == 0)) && ((x == 0) || (z == 0))) { 
  ... 
  } 

Eu posso reduzi-la pela equivalência:

  (A OR B) AND (A OR C) -> A OR (B AND C) 

Assim, eu posso simplificar o código da seguinte maneira:

  if ((x == 0) || ((y == 0) && (z == 0))) { 
  ... 
  } 

A mesma coisa, eu poderia fazer com outras expressões:

  (A AND B) OR (A AND C) -> A AND (B OR C) 
  (A AND B) AND (A AND C) -> A AND B AND C 
  (A OR B) OR (A OR C) -> A OR B OR C 

O legal, é que vale para aquelas expressões mais "complicadas" (ou mais "cabeças", como alguns falam :P ) :

  NOT A OR NOT B -> NOT (A AND B) 
  NOT A AND NOT B -> NOT (A OR B) 
  (NOT A AND B) OR (NOT B AND A) -> A XOR B 
  (NOT A OR B) AND (NOT B OR A) -> NOT (A XOR B) 

Vamos pegar a última expressão acima:

  if (((!(a > b)) || (c < d)) && ((!(c < d)) || (a > b))) { 
  ... 
  } 

Aplicando:

  (NOT A OR B) AND (NOT B OR A) -> NOT (A XOR B) 

Temos:

  if (!((a > b) ^ (c < d))) { 
  ... 
  } 

Será que isso ajuda alguém? :)

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de Ricardo Takemura