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
| Operador | Nome | Explicaçã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 |
!expr | NÃ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ão | Resultado |
|---|---|
true && true | true |
true && false | false |
false && true | false |
false && false | false |
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ão | Resultado |
|---|---|
| true || true | true |
| true || false | true |
| false || true | true |
| false || false | false |
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:
- Dentro dos parênteses: calcule primeiro
col == 0 || col == 3(verifica se a coluna é 0 ou 3) - Aplique a negação com
!done - 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)