Olá, Marcos. Como vai?
Muito obrigado por trazer essa observação para o fórum! É muito gratificante ver alunos analisando o código de forma crítica, pois isso demonstra que você está prestando atenção máxima aos detalhes da lógica de programação.
No entanto, analisando friamente a estrutura de controle que você compartilhou, a resposta informada no exercício está tecnicamente correta e a função vai sim retornar a taxa de 2% (ou 0.02) quando for acionada com os valores adequados.
Vamos entender passo a passo o porquê disso acontecer e como o Dart (e a maioria das linguagens de programação) avalia as estruturas if / else if / else:
- O fluxo é excludente: Quando o Dart entra em uma estrutura condicional ligada por
else if, as condições são testadas em ordem (de cima para baixo). Assim que o programa encontra uma condição verdadeira, ele executa o bloco de código correspondente, retorna o valor e ignora completamente todo o resto da estrutura. - Por que a taxa de 2% funciona? Se chamarmos a função passando um saldo de
3000 (ex: calcularTaxaDeJuros(3000)), o Dart fará os seguintes testes:
- Ele testa o primeiro
if: 3000 < 1000? Isto é Falso. Portanto, ele não entra no primeiro bloco e não retorna 0.01. - Ele passa para o próximo teste, o
else if: 3000 < 5000? Isto é Verdadeiro. Como a condição é real, ele entra nesse bloco e executa o return 0.02.
O comportamento que você mencionou — de a primeira condição "engolir" a segunda — só aconteceria se as faixas de valores estivessem invertidas no código. Por exemplo, se testássemos saldo < 5000 primeiro e saldo < 1000 no else if, aí sim teríamos um bug de lógica, pois qualquer valor menor que 1000 também é menor que 5000.
Para deixar esse fluxo de tomadas de decisão perfeitamente claro e te ajudar a visualizar como o Dart processou os caminhos, veja este exemplo prático simulando diferentes entradas no console:
void main() {
print(calcularTaxaDeJuros(500)); // Printa: 0.01 (Cai no IF: 500 é menor que 1000)
print(calcularTaxaDeJuros(2500)); // Printa: 0.02 (Cai no ELSE IF: não é menor que 1000, mas é menor que 5000)
print(calcularTaxaDeJuros(7000)); // Printa: 0.03 (Cai no ELSE: não atendeu nenhuma das condições anteriores)
}
double calcularTaxaDeJuros(double saldo) {
if (saldo < 1000) {
return 0.01;
} else if (saldo < 5000) {
return 0.02;
} else {
return 0.03;
}
}
A lógica aplicada no exercício cria faixas bem delimitadas de forma implícita:
- Menor que 1000: 1%
- De 1000 até 4999.99: 2%
- De 5000 para cima: 3%
Continue testando e quebrando os códigos dessa forma! Esse hábito de depurar mentalmente os fluxos é o que diferencia um desenvolvedor comum de um excelente profissional em Flutter e Dart.
Espero que possa ter lhe ajudado!