01/04/2024

Álgebra booleana e o Python

Primeiro um pouquinho de história

Há cerca de 2.500 anos, os filósofos gregos já se envolviam em desafios de lógica, explorando problemas que exigiam um pensamento estruturado para alcançar conclusões corretas.

Conhecidos como "problemas de lógica", esses exercícios demandavam a aplicação de regras de dedução e análise para chegar a uma solução baseada nas informações fornecidas.

Em 1847, o matemático inglês George Boole introduziu os conceitos de lógica simbólica, demonstrando que a lógica podia ser representada por equações algébricas.

Boole introduziu três operadores fundamentais: E, OU e NÃO (em inglês, AND, OR e NOT), os quais eram utilizados em um domínio restrito a apenas dois valores: 1 e 0, representando respectivamente Verdadeiro e Falso, ou Sim e Não.

Atualmente conhecida como álgebra booleana, essa estrutura matemática para lidar com o raciocínio lógico se tornou fundamental, não apenas na matemática e na filosofia, mas também na ciência da computação.

Em 1937, cerca de 75 anos após a morte de Boole, o matemático estadunidense Claude Shannon, então estudante no MIT, estabeleceu a relação entre a álgebra booleana e os circuitos eletrônicos, associando os estados lógicos (Sim e Não) a diferentes potenciais elétricos no circuito.

Voltando à atualidade

Em todas as linguagens de programação temos algum tipo de variável específico para guardar esses valores booleanos.

Em Python o tipo dessas variáveis se chama Boolean, que aceita os valores True e False (Verdadeiro e Falso).

Os operadores fundamentais introduzidos por Boole também estão em todas as linguagens de programação. Em Python eles são: and, or e not, como os originais, em inglês, porém em minúsculas, e são chamados de Operadores Lógicos:

  • and (e): Operador dual, opera sobre dois valores, à esquerda e à direita, e retorna True se ambos os valores forem True, senão retorna False.
  • or (ou): Operador dual, opera sobre dois valores, à esquerda e à direita, e retorna True se algum dos dois valores for True, senão retorna False.
  • not (não): Operador unário, opera sobre um valor, à direita, e retorna True, se este for False, ou False, se for True.

Com esses operadores é possível calcular um novo valor booleano, baseado em um ou mais valores booleanos.

Porém, novos valores booleanos podem ser calculados também utilizando outro tipo de operadores, os Operadores de Comparação. Estes operam sobre dois valores, à esquerda e à direita, chamados operandos. No Python os Operadores de Comparação são:

  • == (igual a): Retorna True se os operandos forem iguais.
  • != (diferente de): Retorna True se os operandos forem diferentes.
  • < (menor que): Retorna True se o operando esquerdo for menor que o operando direito.
  • > (maior que): Retorna True se o operando esquerdo for maior que o operando direito.
  • <= (menor ou igual a): Retorna True se o operando esquerdo for menor ou igual ao operando direito.
  • >= (maior ou igual a): Retorna True se o operando esquerdo for maior ou igual ao operando direito.

Para todos os operadores acima, caso não seja atendida a condição para retornar True, retornam o único outro valor booleano, False.

Atenção ao operador de comparação de igualdade, que é composto de dois sinais de igual, "==", não apenas um.

Em Python o operador de apenas um sinal de igual, "=", é o Operador de Atribuição.

  • = (atribuição): A variável, à esquerda, recebe o valor da expressão, à direita.

Para montar expressões lógicas complexas utilizando os operadores lógicos e de comparação, podemos necessitar de ajuda de parênteses, "(" e ")", para definir precedências. O mesmo uso que as expressões matemáticas fazem dos parênteses.

Exemplo matemático do uso de parênteses: Eu quero calcular o dobro do dinheiro que está no meu bolso e na minha mochila. Tenho R$10 no bolso e R$20 na mochila.

Conta errada: 2 * 10 + 20 = 40

Conta correta: 2 * ( 10 + 20 ) = 60

A segunda conta é a correta pois, com o auxílio dos parênteses, fica claro que, especificamente na resolução desta expressão, a soma deve ser feita antes da multiplicação.

"Chega de papo! Mostre-me o código!"

25/03/2024

Fire, não! Lava Lamp Wall!

A maioria das pessoas sabe que se utiliza "Fire Wall" para aumentar a segurança de uma infraestrutura de rede.

Mas, será que uma "Lava Lamp Wall" também pode nos ajudar nisso?

A curiosa resposta é: Sim! 

Não domino os detalhes técnicos, mas vou resumir o que entendi ao ler sobre isso há alguns anos.

A Cloudflare, uma empresa que oferece uma variedade de serviços de segurança e desempenho para websites e aplicativos, precisa um gerador randômico (aleatório), totalmente imprevisível, para gerar suas chaves de segurança, utilizadas por muitos serviços importantes utilizados ao redor do mundo.

20/03/2024

Dia internacional da felicidade e primeiro dia do outono

Hoje é o dia internacional da felicidade e primeiro dia do outono.

Não sei se é por acaso que esses dias coincidem, mas fica a reflexão:

Temos que aprender com o outono a deixar para trás as pequenas coisas cujos prazos de validade já venceram.

Às vezes essas pequenas coisas são tantas, que nos impedem de ser felizes.