Tell, Don’t Ask e Fail Fast

Felipe Rodolfo
2 min readAug 10, 2023
Foto de Miguel A Amutio na Unsplash

A programação eficaz não se trata apenas de escrever código que funcione, mas também de escrever código que seja fácil de entender, manter e depurar. Dois princípios importantes nesse contexto são “Tell, Don’t Ask” e “Fail Fast”. Esses princípios não apenas melhoram a qualidade do código, mas também promovem a clareza e a robustez do software. Neste artigo, vamos explorar esses princípios e apresentar exemplos práticos em Java, mas que servem para qualquer linguagem.

Tell, Don’t Ask

O princípio “Tell, Don’t Ask” (Diga, Não Pergunte) enfatiza que, em vez de obter informações de um objeto para tomar decisões externas, devemos instruir o objeto a realizar uma ação diretamente. Isso ajuda a manter o encapsulamento e reduzir o acoplamento entre as partes do código.

Exemplo:

Suponha que estamos lidando com uma classe `Car` que tem um método `startEngine()`. Em vez de perguntar ao carro se o motor está ligado para decidir se deve ou não iniciar o motor, podemos simplesmente instruir o carro a iniciar o motor:

// Abordagem errada (Ask)
if (!car.isEngineStarted()) {
car.startEngine();
}
// Abordagem correta (Tell)
car.startEngine();

Nesse exemplo, a abordagem correta (“Tell”) é preferível, pois elimina a necessidade de acessar o estado interno do objeto `car`.

Fail Fast

O princípio “Fail Fast” (Falhe Rápido) incentiva a detecção precoce e o tratamento imediato de erros. Quando um problema é detectado, o sistema deve falhar imediatamente em vez de continuar a executar com dados potencialmente corrompidos, o que pode levar a erros mais complexos e difíceis de identificar posteriormente.

Exemplo:

Considere uma classe que lida com um carrinho de compras online. Se um item com preço negativo for adicionado ao carrinho, isso é um erro que deve ser tratado imediatamente:

public void addItemToCart(Item item) {
if (item.getPrice() < 0) {
throw new IllegalArgumentException("O preço do item não pode ser negativo");
}
// Adicionar o item ao carrinho
}

Nesse exemplo, a detecção do preço negativo e a exceção lançada estão seguindo o princípio “Fail Fast”. Isso evita que o sistema continue a operar com dados inválidos.

Os princípios de “Tell, Don’t Ask” e “Fail Fast” são fundamentais para a criação de código limpo, legível e robusto. Ao adotar o “Tell, Don’t Ask”, podemos reduzir o acoplamento e melhorar a coesão em nosso código. Com o “Fail Fast”, garantimos que problemas sejam identificados e tratados rapidamente, evitando cenários indesejados. Ao aplicar esses princípios, podemos criar sistemas mais confiáveis e mais fáceis de manter ao longo do tempo.

--

--