Operadores
Operadores aritméticos
int a = 10;
int b = 3;
print(a + b); // 13 (adição)
print(a - b); // 7 (subtração)
print(a * b); // 30 (multiplicação)
print(a / b); // 3.333... (divisão, retorna double)
print(a ~/ b); // 3 (divisão inteira)
print(a % b); // 1 (módulo/resto)
print(-a); // -10 (negativo)
Operadores de comparação
int a = 10;
int b = 5;
print(a == b); // false (igualdade)
print(a != b); // true (diferença)
print(a > b); // true (maior que)
print(a < b); // false (menor que)
print(a >= b); // true (maior ou igual)
print(a <= b); // false (menor ou igual)
Operadores lógicos
bool a = true;
bool b = false;
print(a && b); // false (E lógico)
print(a || b); // true (OU lógico)
print(!a); // false (NÃO lógico)
Null-aware operators
Operadores especiais para trabalhar com valores nullable:
String? nome;
// ?. - Acesso seguro a membros
print(nome?.length); // null (se nome for null)
// ?? - Operador de coalescência nula
String nomeCompleto = nome ?? "Desconhecido"; // "Desconhecido" se nome for null
// ??= - Atribuição se null
nome ??= "João"; // Atribui "João" apenas se nome for null
// ! - Operador de asserção (garante que não é null)
String nome2 = nome!; // Lança exceção se nome for null
Type test operators
Object valor = "texto";
print(valor is String); // true
print(valor is! int); // true (não é int)
// Cast
String texto = valor as String; // Converte para String
Exercícios
-
Operadores aritméticos: Crie uma função que calcule a área de um retângulo (largura × altura) e o perímetro (2 × largura + 2 × altura). Use operadores aritméticos.
-
Operadores de comparação: Crie uma função que receba duas idades e retorne uma mensagem indicando qual pessoa é mais velha, mais nova ou se têm a mesma idade.
-
Operadores lógicos: Crie uma função que verifique se uma pessoa pode votar. A pessoa pode votar se tiver 16 anos ou mais E se for brasileiro. Use operadores lógicos.
-
Null-aware operators: Crie uma função que receba um
String?nome e umString?sobrenome. Se algum for null, use "Desconhecido" como valor padrão. Retorne o nome completo formatado. -
Type test operators: Crie uma função que receba um
Objecte verifique seu tipo. Se forString, retorne o comprimento. Se forint, retorne o dobro do valor. Se fordouble, retorne o valor arredondado. Caso contrário, retorne "Tipo não suportado".
Soluções
Ver solução do exercício 1
void calcularRetangulo(double largura, double altura) {
double area = largura * altura;
double perimetro = 2 * largura + 2 * altura;
print("Largura: $largura, Altura: $altura");
print("Área: $area");
print("Perímetro: $perimetro");
}
void main() {
calcularRetangulo(5.0, 3.0);
// Com retorno
Map<String, double> calcularRetangulo2(double largura, double altura) {
return {
'area': largura * altura,
'perimetro': 2 * (largura + altura),
};
}
var resultado = calcularRetangulo2(10.0, 5.0);
print("Área: ${resultado['area']}, Perímetro: ${resultado['perimetro']}");
}
Ver solução do exercício 2
String compararIdades(int idade1, int idade2) {
if (idade1 > idade2) {
return "A primeira pessoa é mais velha";
} else if (idade1 < idade2) {
return "A segunda pessoa é mais velha";
} else {
return "As duas pessoas têm a mesma idade";
}
}
void main() {
print(compararIdades(25, 30));
print(compararIdades(30, 25));
print(compararIdades(25, 25));
}
Ver solução do exercício 3
bool podeVotar(int idade, bool isBrasileiro) {
return idade >= 16 && isBrasileiro;
}
String verificarVoto(int idade, bool isBrasileiro) {
if (podeVotar(idade, isBrasileiro)) {
return "Pode votar";
} else {
if (idade < 16) {
return "Não pode votar: menor de 16 anos";
} else if (!isBrasileiro) {
return "Não pode votar: não é brasileiro";
}
return "Não pode votar";
}
}
void main() {
print(verificarVoto(18, true)); // Pode votar
print(verificarVoto(15, true)); // Não pode votar: menor de 16 anos
print(verificarVoto(20, false)); // Não pode votar: não é brasileiro
print(verificarVoto(16, true)); // Pode votar
}
Ver solução do exercício 4
String obterNomeCompleto(String? nome, String? sobrenome) {
String nomeFinal = nome ?? "Desconhecido";
String sobrenomeFinal = sobrenome ?? "Desconhecido";
return "$nomeFinal $sobrenomeFinal";
}
void main() {
print(obterNomeCompleto("João", "Silva")); // João Silva
print(obterNomeCompleto(null, "Silva")); // Desconhecido Silva
print(obterNomeCompleto("João", null)); // João Desconhecido
print(obterNomeCompleto(null, null)); // Desconhecido Desconhecido
// Usando ??= para atribuição
String? nome;
String? sobrenome = "Santos";
nome ??= "Desconhecido";
sobrenome ??= "Desconhecido";
print("$nome $sobrenome");
}
Ver solução do exercício 5
dynamic processarValor(Object valor) {
if (valor is String) {
return valor.length;
} else if (valor is int) {
return valor * 2;
} else if (valor is double) {
return valor.round();
} else {
return "Tipo não suportado";
}
}
void main() {
print(processarValor("Dart")); // 4
print(processarValor(5)); // 10
print(processarValor(3.7)); // 4
print(processarValor(true)); // Tipo não suportado
// Usando is! para verificação negativa
String processarValor2(Object valor) {
if (valor is! String && valor is! int && valor is! double) {
return "Tipo não suportado";
}
if (valor is String) return "Comprimento: ${valor.length}";
if (valor is int) return "Dobro: ${valor * 2}";
if (valor is double) return "Arredondado: ${valor.round()}";
return "";
}
print(processarValor2("Flutter"));
print(processarValor2(10));
print(processarValor2(4.9));
}