4 Condicionais
4.1 Para que serve
Condicionais fazem o programa tomar decisões.
Em um chatbot, isso permite respostas diferentes para cada mensagem. Na prática, você define uma regra e o programa escolhe qual bloco de código executar. Esse tipo de estrutura aparece em quase todo sistema, desde login até validação de formulários. Aprender condicionais cedo ajuda a pensar em lógica de forma organizada. Também ajuda a reduzir erros, porque você descreve explicitamente o que deve acontecer em cada cenário. Quando as regras estão claras no código, fica mais fácil testar, depurar e evoluir a aplicação. Em Java, essas decisões normalmente aparecem com if, else if, else, switch e operador ternário.
4.2 Exemplo com if
O if é útil quando você precisa testar condições em sequência. Cada else if representa uma nova possibilidade de resposta. O else final funciona como plano B para casos não previstos. Esse formato é ideal quando as condições não são apenas valores fixos, mas incluem comparações, intervalos e combinações com operadores lógicos.
String mensagem = "oi";
if (mensagem.equalsIgnoreCase("oi")) {
System.out.println("Bot: Oi! Como posso ajudar?");
} else if (mensagem.equalsIgnoreCase("tchau")) {
System.out.println("Bot: Até mais!");
} else {
System.out.println("Bot: Não entendi, pode repetir?");
}No exemplo acima, equalsIgnoreCase evita problemas com letras maiúsculas e minúsculas. Essa escolha melhora a experiência da pessoa usuária e evita duplicar regras para "oi", "OI" e "Oi".
4.3 Exemplo com switch
O switch deixa o código mais limpo quando há várias opções fixas. Cada case trata um valor específico da variável analisada. O default cobre entradas que não correspondem a nenhuma opção válida. Em Java moderno, o switch também pode ser usado de forma mais expressiva, reduzindo repetição e risco de esquecimento de break.
String comando = "menu";
switch (comando) {
case "menu":
System.out.println("Bot: 1-Saldo 2-Ajuda 3-Sair");
break;
case "ajuda":
System.out.println("Bot: Digite uma opção numérica.");
break;
default:
System.out.println("Bot: Comando inválido.");
}Quando as respostas forem diretas e baseadas em um conjunto fechado de palavras, o switch costuma facilitar a leitura. Quando houver validações mais complexas, prefira if.
4.4 Operadores relacionais e lógicos
Antes de escrever boas condicionais, é importante dominar os operadores usados nas expressões.
- Relacionais:
==,!=,>,<,>=,<= - Lógicos:
&&(E),||(OU),!(NÃO)
Esses operadores permitem criar condições simples e também regras compostas. Em regras compostas, lembre-se de usar parênteses para deixar a intenção explícita.
int idade = 17;
boolean possuiAutorizacao = true;
if (idade >= 16 && possuiAutorizacao) {
System.out.println("Acesso permitido.");
} else {
System.out.println("Acesso negado.");
}4.5 Precedência e legibilidade
Java segue regras de precedência na avaliação das expressões. Mesmo que o compilador entenda, nem sempre o código fica claro para quem lê. Por isso, use parênteses para tornar a regra explícita e reduzir ambiguidade.
boolean alunoAtivo = true;
double nota = 6.5;
int faltas = 3;
if (alunoAtivo && (nota >= 7.0 || faltas <= 2)) {
System.out.println("Situação parcial favorável.");
}No exemplo, os parênteses deixam claro que a segunda parte da regra pode ser satisfeita por nota ou por faltas.
4.6 Condicionais aninhadas
Condicionais aninhadas são if dentro de if. Elas funcionam bem quando existe uma regra principal e subregras dependentes. Use com cuidado para evitar código profundo e difícil de manter.
boolean usuarioLogado = true;
String perfil = "admin";
if (usuarioLogado) {
if (perfil.equals("admin")) {
System.out.println("Painel administrativo liberado.");
} else {
System.out.println("Acesso básico liberado.");
}
} else {
System.out.println("Faça login para continuar.");
}Se o bloco começar a ficar grande, considere extrair partes da regra para métodos auxiliares.
4.7 Operador ternário
O operador ternário é uma forma compacta de decisão simples. Ele não substitui todas as condicionais, mas é útil para atribuições curtas.
int temperatura = 29;
String status = temperatura >= 30 ? "quente" : "agradável";
System.out.println("Clima: " + status);Evite ternários longos ou encadeados em excesso. Quando a regra fica extensa, if/else é mais legível.
4.8 Erros comuns em condicionais
Um erro comum é comparar String com == em vez de usar equals ou equalsIgnoreCase. Outro erro frequente é esquecer chaves em blocos com mais de uma instrução. Também é comum escrever condições duplicadas em pontos diferentes do programa, dificultando manutenção.
Boas práticas para evitar esses problemas:
- Nomeie variáveis booleanas com clareza, como
usuarioAutenticado. - Use parênteses em expressões compostas para deixar a lógica explícita.
- Prefira simplicidade: uma regra clara vale mais que uma regra compacta e confusa.
- Teste entradas inesperadas para validar o comportamento do
elseoudefault.
4.9 Dica de sala de aula
Use if quando as regras forem mais variadas.
Use switch quando você comparar uma variável com várias opções fixas. Se houver comparações com intervalos, operações lógicas ou condições compostas, prefira if. Se houver apenas comandos diretos e valores fechados, switch costuma ficar mais legível. Uma boa estratégia é começar com if para validar a regra e depois refatorar para switch quando perceber muitos valores fixos. Esse processo treina seu olhar de organização sem comprometer o entendimento inicial.
- Crie respostas para
oi,ajudaesair. - Adicione uma resposta padrão.
- Faça uma versão com
ife outra comswitch. - Inclua o comando
menumostrando três opções para a pessoa usuária. - Trate entradas com letras maiúsculas e minúsculas sem quebrar a lógica.
- Escreva no caderno quando você escolheria
ifem vez deswitch.
Neste capitulo, o estudo de condicionais se torna realmente valioso quando voce deixa de enxergar o conteudo como uma lista de regras isoladas e passa a observar como cada decisao tecnica influencia a qualidade do programa, a facilidade de manutencao e a capacidade de adaptar a solucao sem quebrar o que ja estava funcionando, especialmente em atividades progressivas que simulam situacoes de projeto real.
Para consolidar o aprendizado com profundidade, vale estruturar sua pratica em uma sequencia objetiva na qual voce revisa o conceito principal, implementa um exemplo pequeno e legivel e, logo em seguida, analisa de maneira critica se houve melhoria concreta em ramificacao de regras, leitura de cenarios e correcao logica, porque esse ciclo consciente transforma estudo passivo em desenvolvimento de criterio tecnico.
Quando esse processo se repete ao longo das semanas, voce comeca a perceber que sua evolucao nao depende de decorar respostas prontas, mas sim de interpretar problemas com mais maturidade, justificar escolhas com argumentos claros e construir solucoes cada vez mais consistentes, o que representa exatamente a transicao de iniciante para praticante autonomo dentro da trilha de Java.
4.10 Mini desafio técnico
Implemente um menu com as opções saldo, deposito, saque e sair. Use switch para tratar o comando principal. Dentro da opção saque, use if para validar se o valor solicitado é maior que zero e menor ou igual ao saldo disponível. Ao final, escreva uma breve análise explicando por que você combinou switch e if na mesma solução.