Introdução
A ideia por trás do Early Return está no próprio nome: ficar o mais próximo possível do return
. Em vez de prender o fluxo em if...else
, você trata os casos inválidos logo no início e libera o caminho principal.
Exemplo tradicional
Regra de negócio: se o saldo for maior que 10.000, o empréstimo é aprovado. Caso contrário, é reprovado.
if Saldo > 10000 then
EmprestimoAprovado
else
EmprestimoReprovado;
Com Early Return e negação
if not (Saldo > 10000) then
Exit(EmprestimoReprovado);
EmprestimoAprovado;
Note: o else
desapareceu.
O fluxo inválido é interrompido no topo, e o caminho válido segue naturalmente.
Simples, direto e legível. Mas... o if
ainda está ali. Preciso fazer ele desaparecer? Depende.
A regra de negócio está "incrustada"
Nesse exemplo, a lógica está dentro do código. Se ela mudar, é preciso alterar, compilar e redistribuir. Mas sejamos honestos: isso não é um problema — ao contrário do que alguns defendem para justificar a "fuga do if
".
Com ou sem if
, regras codificadas exigem recompilação. Simples assim.
Mas no TheCodeNaked vamos além.
Você vai ver como mudar regras sem recompilar, sem redistribuir —
mas por enquanto... segure essa ideia. A gente ainda vai chegar lá.
Sumindo com o if
(mas sem mágica)
DisponibilizarEmprestimo(ProcessaAnalise(Saldo));
Agora temos um método que decide se o empréstimo deve ser liberado, baseado no resultado de uma função:
function ProcessaAnalise(Saldo: Currency): Boolean;
begin
Result := Saldo > 10000;
end;
E podemos compor de forma ainda mais elegante:
if DisponibilizarEmprestimo(ProcessaAnalise(Saldo)) then
ShowMessage('Seu empréstimo foi aprovado')
else
ShowMessage('Infelizmente, seu empréstimo não foi aprovado');
Onde queremos chegar?
Você não codificou diretamente a regra.
Você passou uma decisão.
A lógica Saldo > 10000
pode estar em outro lugar:
– numa função externa
– numa estratégia
– numa tabela
– ou até ser carregada dinamicamente
O if
não morreu. Ele só saiu do palco. Mas continua no script.
➕ Alternativa com atribuição direta
Disponivel := Saldo > 10000;
DisponibilizaFinanciamento(Disponivel);
Concisa e funcional — mas não é Early Return.
Atribui o resultado, mas não interrompe o fluxo.
Em algumas linguagens, é essencial garantir que variáveis estejam inicializadas antes do uso. Nem toda linguagem faz isso por você.
Outra abordagem: delegar a decisão
E quando o que muda não é só o valor, mas a forma de decidir?
DisponibilizarCredito(ProcessaAnalise);
Aqui, a lógica foi transferida para fora.ProcessaAnalise
pode ser uma função, uma estratégia, uma injeção de dependência. O if
ainda existe — mas está encapsulado, isolado, intercambiável.
É como perguntar:
"Devo liberar?"
Em vez de afirmar:
"Se for maior que 10, libere."
Mas atenção: negar sempre, só se fizer sentido
Não transforme tudo em uma negação not <condição>
.
Evite duplas negações ou condições que exigem interpretação filosófica:
if ((not isValid) and (not isExpired)) then
Exit;
Isso não é clareza — é confusão.
Reflexão TheCodeNaked-style
Não existe uma única forma de decidir. A melhor abordagem depende de:
- seu contexto
- seu time
- a linguagem
- o nível de clareza necessário
- e da sua responsabilidade pela manutenção futura
Situação | Abordagem Ideal |
---|---|
Decisão simples e direta | Atribuição booleana |
Validação com ação imediata | Early Return |
Interface com duas ações claras | if...else |
Crescimento ou lógica variável | Função externa / Injeção de decisão |
Conclusão
Early Return é uma ferramenta poderosa — mas nem sempre é a melhor escolha.
Às vezes, atribuir já basta. Outras vezes, delegar é melhor ainda. O importante não é eliminar o if
. É garantir que, quando ele aparecer, ele faça sentido — e seja visto com clareza.
O TheCodeNaked não diz “negue sempre”. Mas se for negar, que seja com lucidez. E se for decidir, que seja com propósito.