Operadores lógicos Dart

Operações lógicas trabalham apenas com valores booleanos (true /false), servem para verificar se uma condição é atendida. Existem apenas dois resultados possíveis: true (verdadeiro, condição cumprida), false (falso, condição não cumprida).

Todos os comandos if, validações de laços while/for e condições switch no código são totalmente implementados com operações lógicas nos bastidores.

São três operadores principais: E lógico, OU lógico, NÃO lógico

OperadorNomeExplicação do funcionamento
&&E lógico (AND)O resultado só é true se os dois lados forem true; possui avaliação de curto-circuito
||OU lógico (OR)O resultado já é true se qualquer um dos lados for true; possui avaliação de curto-circuito
!exprNÃO lógico (negação)Inverte o valor booleano: true vira false e false vira true

O funcionamento de E, OU e NÃO é parecido com os circuitos em série e paralelo vistos no ensino médio. Circuito em série corresponde ao E lógico, circuito paralelo ao OU lógico.

1. NÃO lógico !

Inverte o valor de uma única expressão booleana.

Sintaxe:

!expressão_booleana

Exemplo

void main() {
  bool isMale = false;
  print(!isMale); // true

  bool flag = true;
  print(!flag); // false
}Code language: PHP (php)

No início, isMale tem valor false e flag true; ao usar o operador de negação, os valores ficam invertidos.

Também podemos aplicar em expressões completas, por exemplo

void main() {
  int age = 12;
  print(!(age>18)); // true
}Code language: JavaScript (javascript)

A expressão age > 18 retorna false originalmente, mas o símbolo ! na frente inverte o resultado e exibe true.

2. E lógico &&

ExpressãoResultado
true && truetrue
true && falsefalse
false && truefalse
false && falsefalse

O resultado só é true se os dois lados forem true; se qualquer um dos lados for false, o resultado sempre será false.

Característica do curto-circuito: se o lado esquerdo for false, o código do lado direito não executa e retorna false imediatamente.

A lâmpada só acende (true) se os dois interruptores estiverem fechados (true). Se ao menos um estiver aberto (false), a lâmpada fica apagada (false). Quando sabemos que o lado esquerdo é false, não precisamos rodar o código da direita.

void main() {
  bool fun1() {
    print("A função foi executada!");
    return true;
  }

  bool left = false;
  // Lado esquerdo é false, então fun1() não roda
  bool res = left && fun1();
  print("Resultado final: $res");
}Code language: PHP (php)

Saída da execução

D:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
Resultado final: false
Code language: PHP (php)

Mesmo que haja erros ou exceções dentro de fun1, eles não aparecem pois a função nunca é executada.

Exemplo de uso do E lógico

void main() {
  String name = 'admin';
  String password = '123321';

  // && só valida a condição se os dois lados forem true
  if (name=='admin' && password =='456654') {
    print("Login realizado com sucesso");
  } else {
    print("Usuário ou senha incorretos");
  }
}Code language: JavaScript (javascript)

Saída da execução

D:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
Usuário ou senha incorretosCode language: CSS (css)

3. OU lógico ||

Se o lado esquerdo for true, o código da direita não executa e retorna true diretamente.

ExpressãoResultado
true || truetrue
true || falsetrue
false || truetrue
false || falsefalse

Vamos ver um exemplo

void main() {
  bool fun1() {
    print("Função executada");
    return true;
  }
  // Lado esquerdo true, curto-circuito ativa e fun1() não roda
  bool res = true || fun1();
  print(res); // true
}Code language: PHP (php)

Como o lado esquerdo do || é true, a função fun1 da direita não é executada.

Com dois interruptores, basta um estar fechado (true) para a lâmpada acender (true).

void main() {
        bool isParentAgree = true;
	int age = 12;
	if(age>=13 || isParentAgree){
	  print("Permitido a entrada");
	}
}Code language: JavaScript (javascript)

Resumo

A && B: Se A for false, retorna false de imediato, B não é avaliado nem executado

A || B: Se A for true, retorna true de imediato, B não é avaliado nem executado

Aumenta a velocidade de execução e evita erros (muito usado para validação de valores nulos)

Exemplo:

String? name;
// Só acessa length se name não for null; curto-circuito evita erro de referência nula
if(name != null && name.length > 0) 
{

}Code language: JavaScript (javascript)

Se chamarmos name.length diretamente ocorrerá um erro, pois name é null e não possui a propriedade length. Ao validar primeiro name != null: se name for null a primeira condição é false, o restante não executa e não há falha.

Precedência dos três operadores lógicos

! > && > ||

Assim como nas operações matemáticas, operadores com maior precedência são calculados primeiro. Use parênteses () para alterar a ordem dos cálculos.

if (!done && (col == 0 || col == 3)) {
  // ...Executar alguma lógica...
}Code language: JavaScript (javascript)

Ordem passo a passo dos cálculos:

  1. Dentro dos parênteses: calcule primeiro col == 0 || col == 3 (verifica se a coluna é 0 ou 3)
  2. Aplique a negação com !done
  3. Combine os dois resultados com o operador &&

Exemplo

void main() {
  bool done = false;
  int col = 3;

  // Exemplo oficial
  if (!done && (col == 0 || col == 3)) {
    print("Lógica executada: não finalizado e coluna 0 ou 3");
  }

  // Demonstração NÃO lógico !
  bool isFinish = true;
  print(!isFinish); // false

  // Demonstração E lógico &&
  int a = 10, b = 20;
  if (a > 5 && b > 10) {
    print("a maior que 5 E b maior que 10");
  }

  // Demonstração OU lógico ||
  int score = 55;
  if (score < 60 || score > 90) {
    print("Nota reprovada OU nota excelente");
  }

  // Demonstração curto-circuito
  bool func() {
    print("Função executada");
    return true;
  }
  false && func(); // Lado esquerdo false, func não imprime nada
  true || func(); // Lado esquerdo true, func não imprime nada
}Code language: PHP (php)

Saída da execução

D:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
Lógica executada: não finalizado e coluna 0 ou 3
false
a maior que 5 E b maior que 10
Nota reprovada OU nota excelenteCode language: JavaScript (javascript)

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *