TheCodeNaked

Paralelismo - Episódio 12 (Copy)

Episódio 12 – Comparações, lógicas e decisões encadeadas

No episódio anterior, estruturamos um fluxo condicional simples com ifthenelse, e permitimos agrupar múltiplas ações em listas. Mas como prometido no final do episódio 10, chegou a hora de ampliar o poder do interpretador declarativo.

Agora vamos tratar de expressões mais complexas:

  • Comparações como ><>=<=!===
  • Lógicas como andornot
  • Avaliações encadeadas e combinadas

Um passo além nos "if"

Até aqui, uma condicional como esta:

{ "if": { "equals": ["@idade", 18] }, "then": { "acao": "MostrarMensagem" } }

Era interpretada como uma verificação direta de igualdade. Agora, vamos permitir isso:

{
  "if": {
    "and": [
      { ">": ["@idade", 17] },
      { "<": ["@idade", 25] },
      { "!=": ["@pais", "Japao"] }
    ]
  },
  "then": [
    { "acao": "LiberarAcesso" },
    { "acao": "MostrarMensagem", "mensagem": "Acesso autorizado" }
  ],
  "else": { "acao": "MostrarMensagem", "mensagem": "Acesso negado" }
}

Esse bloco diz:

Se idade for maior que 17, menor que 25, e o país diferente de Japão, então...

E isso não requer if aninhado. O interpretador lida com isso como uma expressão booleana de múltiplas condições.


Suporte interno a operadores

Vamos dar suporte direto a estas operações no interpretador:

  • Comparações==!=><>=<=
  • Lógicasandornot

A estrutura básica é:

{ "<operador>": [<operando1>, <operando2>] }

Ou para not, apenas um operando:

{ "not": <expressao> }

Como isso será processado no código?

Em pseudocódigo:

function AvaliarExpressao(expr: TJSONValue): Boolean;
begin
  if expr é objeto com chave "and" então
    Resultado := true;
    para cada item em expr["and"] faça
      Resultado := Resultado and AvaliarExpressao(item);
  else if expr é objeto com chave "==" então
    Resultado := ResolverValor(expr["=="][0]) = ResolverValor(expr["=="][1]);
  // ... e assim por diante para cada operador
end;

A chave de tudo é o método AvaliarExpressao, que será chamado sempre que uma chave "if" for encontrada.


Um novo nível de possibilidades

Com esse recurso, podemos:

  • Criar filtros mais sofisticados
  • Reaproveitar as mesmas expressões em múltiplas decisões
  • Encadear lógicas sem perder clareza
  • Construir um interpretador poderoso sem recorrer a eval ou scripts externos

E tudo isso permanece:

  • Seguro
  • Declarativo
  • Extensível

No próximo episódio, vamos mostrar como:

  • Reutilizar essas expressões como funções reutilizáveis
  • Criar um sistema de macros ou alias
  • Introduzir contexto local para expressões mais ricas

Estamos avançando rápido. A linguagem declarativa está se tornando expressiva, segura e poderosa. E tudo isso, controlado por você.

Sobre o autor

TheCodeNaked

No TheCodeNaked, programar é consequência, não ponto de partida. Antes do código, vem a dúvida, a análise, o contexto. Não seguimos fórmulas — questionamos. Criar software é pensar com clareza. O resto é só digitação.

TheCodeNaked

Criar com clareza. Codificar com intenção.

TheCodeNaked

Ótimo! Você se inscreveu com sucesso.

Bem-vindo de volta! Você acessou com sucesso.

Você se inscreveu com sucesso o TheCodeNaked.

Sucesso! Verifique seu e-mail para acessar com o link mágico.

As suas informações de faturamento foram atualizadas.

Seu pagamento não foi atualizado