Switch Expressions
>> Inicializando sistema de expressões switch...
>> Carregando padrões de correspondência...
>> Estabelecendo rotas de decisão...
Introdução
O switch expression é uma feature moderna do Java que oferece uma forma mais concisa e segura de escrever estruturas de decisão múltipla.
Sintaxe Básica
Switch Expression Tradicional
String status = switch (statusCode) {
case 200 -> "OK";
case 404 -> "Not Found";
case 500 -> "Internal Server Error";
default -> "Unknown Status";
};
Switch com Múltiplos Casos
String category = switch (score) {
case 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100 -> "A";
case 80, 81, 82, 83, 84, 85, 86, 87, 88, 89 -> "B";
case 70, 71, 72, 73, 74, 75, 76, 77, 78, 79 -> "C";
default -> "F";
};
Recursos Avançados
Yield
String message = switch (level) {
case "INFO" -> {
logInfo();
yield "Information message";
}
case "WARNING" -> {
logWarning();
yield "Warning message";
}
case "ERROR" -> {
logError();
yield "Error message";
}
default -> "Unknown level";
};
Pattern Matching (Preview)
String typeCheck = switch (obj) {
case String s -> "Text: " + s;
case Integer i -> "Number: " + i;
case Long l -> "Long: " + l;
case null -> "Null value";
default -> "Unknown type";
};
Boas Práticas
Expressividade
Use nomes descritivos para variáveis
Mantenha casos relacionados agrupados
Evite lógica complexa dentro dos casos
Organização
Ordene os casos de forma lógica
Agrupe casos similares
Use comentários para documentar casos complexos
Manutenibilidade
Evite fallthrough entre casos
Sempre inclua um caso default
Mantenha a lógica simples e direta
Exemplos Práticos
Processador de Status HTTP
HttpResponse processStatus(int code) {
return switch (code) {
case 200, 201, 202 -> new SuccessResponse();
case 400, 401, 403 -> new ClientErrorResponse();
case 500, 502, 503 -> new ServerErrorResponse();
default -> new UnknownResponse();
};
}
Calculadora Simples
double calculate(double a, double b, String operator) {
return switch (operator) {
case "+" -> a + b;
case "-" -> a - b;
case "*" -> a * b;
case "/" -> {
if (b == 0) {
throw new ArithmeticException("Divisão por zero");
}
yield a / b;
}
default -> throw new IllegalArgumentException("Operador inválido");
};
}
Troubleshooting
Problemas Comuns
Esquecimento do Default
// Incorreto - Compilação falha
String result = switch (value) {
case 1 -> "Um";
case 2 -> "Dois";
}; // Erro: falta caso default
// Correto
String result = switch (value) {
case 1 -> "Um";
case 2 -> "Dois";
default -> "Outro";
};
Mistura de Arrow e Block
// Incorreto - Sintaxe inconsistente
String result = switch (value) {
case 1 -> "Um"
case 2: yield "Dois";
};
// Correto
String result = switch (value) {
case 1 -> "Um";
case 2 -> "Dois";
};
Exercícios Práticos
Conversor de Dia da Semana
String getDayName(int day) {
return switch (day) {
case 1 -> "Domingo";
case 2 -> "Segunda";
case 3 -> "Terça";
case 4 -> "Quarta";
case 5 -> "Quinta";
case 6 -> "Sexta";
case 7 -> "Sábado";
default -> "Dia inválido";
};
}
Classificador de Notas
String classifyGrade(double grade) {
return switch ((int) grade / 10) {
case 10, 9 -> "A";
case 8 -> "B";
case 7 -> "C";
case 6 -> "D";
default -> "F";
};
}
Próximos Passos
Explore pattern matching em Pattern Matching
Pratique com exercícios em Control Flow Projects
Aprenda sobre expressões lambda em Lambda
26 June 2025