DEV Community

Cover image for Keep It Simple - Busque a simplicidade
Matheus Sena
Matheus Sena

Posted on

Keep It Simple - Busque a simplicidade

Quando se trata de engenharia de software, um princípio se destaca para sempre: KISS, que significa "Keep It Simple, Stupid" _(Mantenha Simples, Estúpido). _

O Que é KISS?

O princípio KISS trata da simplicidade.
Ele sugere que os sistemas funcionam melhor quando são mantidos simples, em vez de serem tornados complexos. O objetivo é evitar complexidade desnecessária em seu código e soluções. Quanto mais simples for o design, mais fácil será entender, manter e expandir.

Mas porque ser simples?

1. Mais Fácil de Entender

Código simples é mais fácil para você e outros lerem e entenderem. Quando seu código é claro, outros desenvolvedores podem rapidamente entender o que ele faz, tornando a colaboração suave e a integração de novos membros da equipe mais rápida.

2. Menos Propenso a Erros

A complexidade geralmente leva a bugs. Quanto mais complexo for seu código, mais difícil será testá-lo e maior será a probabilidade de introduzir erros. Manter a simplicidade reduz o risco de bugs e facilita a depuração.

3. Mais Fácil de Manter

Código simples é mais fácil de manter e atualizar. Quando você precisa adicionar novos recursos ou corrigir bugs, é muito mais fácil fazer isso em uma base de código simples e bem organizada.

4. Melhora o Desempenho

Soluções simples muitas vezes têm um desempenho melhor porque usam menos recursos. Código excessivamente complexo pode desacelerar seu sistema e torná-lo menos eficiente.

Ok, mas como posso manter a simplicidade?

Vamos ver alguns exemplos práticos para ilustrar como manter as coisas simples.

1. Evite Superengenharia

Código Complexo:

public class ComplexCalculator {
    public int calculate(String operation, int a, int b) {
        switch (operation) {
            case "add":
                return a + b;
            case "subtract":
                return a - b;
            case "multiply":
                return a * b;
            case "divide":
                if (b != 0) {
                    return a / b;
                } else {
                    throw new ArithmeticException("Division by zero");
                }
            default:
                throw new UnsupportedOperationException("Operation not supported");
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Código Simples:

public class SimpleCalculator {
    public int add(int a, int b) {
        return a + b;
    }

    public int subtract(int a, int b) {
        return a - b;
    }

    public int multiply(int a, int b) {
        return a * b;
    }

    public int divide(int a, int b) {
        if (b == 0) {
            throw new ArithmeticException("Division by zero");
        }
        return a / b;
    }
}
Enter fullscreen mode Exit fullscreen mode

Benefícios:

  • Clareza: Cada método tem uma responsabilidade única (adição, subtração, multiplicação ou divisão), facilitando a compreensão do que cada método faz.
  • Manutenibilidade: Se for necessário alterar como uma operação específica é realizada, isso pode ser feito isoladamente, sem afetar outras operações.
  • Tratamento de Erros: O tratamento de erros específico (como divisão por zero) está isolado no método relevante.

2. Use Convenções de Nomenclatura Claras

Código Complexo:

public class OperationExecutor {
    public void exec(String op, int x, int y) {
        // Lógica complexa aqui
    }
}
Enter fullscreen mode Exit fullscreen mode

Código Simples:

public class MathOperations {
    public void executeAddition(int x, int y) {
        // Lógica simples aqui
    }
}
Enter fullscreen mode Exit fullscreen mode

Benefícios:

  • Legibilidade: Nomes de métodos claros e descritivos tornam imediatamente óbvio o que cada método faz.
  • Facilidade de Uso: Os usuários da classe não precisam lembrar de strings de operação como "add" ou "sub"; eles apenas chamam o método apropriado.
  • Consistência: Os nomes dos métodos seguem uma convenção de nomenclatura consistente, reduzindo a carga cognitiva para entender e usar a classe.

3. Escreva Funções Pequenas

Código Complexo:

public class ComplexProcessor {
    public void process() {
        // Função grande com muitas responsabilidades
    }
}
Enter fullscreen mode Exit fullscreen mode

Código Simples:

public class SimpleProcessor {
    public void processPartA() {
        // Lógica da Parte A
    }

    public void processPartB() {
        // Lógica da Parte B
    }

    public void processPartC() {
        // Lógica da Parte C
    }
}
Enter fullscreen mode Exit fullscreen mode

Benefícios:

  • Modularidade: Cada função faz uma coisa e faz bem, seguindo o princípio da responsabilidade única.
  • Reusabilidade: Funções menores podem ser reutilizadas em diferentes contextos, tornando o código mais modular.
  • Testabilidade: É mais fácil escrever testes unitários para funções pequenas e focadas do que para uma grande função monolítica.

4. Siga Padrões Estabelecidos

Código Complexo:

public class ComplexLogger {
    public void log(String level, String message) {
        // Lógica de logging complexa
    }
}
Enter fullscreen mode Exit fullscreen mode

Código Simples:

public class SimpleLogger {
    public void logInfo(String message) {
        System.out.println("INFO: " + message);
    }

    public void logError(String message) {
        System.err.println("ERROR: " + message);
    }
}
Enter fullscreen mode Exit fullscreen mode

Benefícios:

  • Clareza: A lógica de logging é direta e fácil de seguir.
  • Consistência: O uso de um padrão simples para logging garante que todas as mensagens de log sejam formatadas de maneira consistente.
  • Simplicidade: Ao não complicar o processo de logging, o código permanece fácil de ler e manter.

Em resumo:

Da próxima vez que você estiver trabalhando em um projeto, lembre-se de perguntar a si mesmo: "Estou mantendo isso simples?" Se a resposta for não, pode ser hora de repensar sua abordagem. Manter a simplicidade não só melhora a qualidade do seu código, mas também torna seu trabalho mais agradável e eficiente.

Lembre-se:

  • Mais Fácil de Entender: Código simples é mais fácil de ler e entender, facilitando a colaboração e a integração de novos membros na equipe.
  • Menos Propenso a Erros: A complexidade aumenta a chance de bugs. Código simples é mais fácil de testar e depurar. Facilidade de Manutenção: Código simples é mais fácil de atualizar e corrigir.
  • Melhora o Desempenho: Soluções simples geralmente são mais eficientes, usando menos recursos.

  • Evitar Superengenharia: Mantenha o código claro e com responsabilidade única para cada método.

  • Usar Convenções de Nomenclatura Claras: Nomes descritivos tornam o código mais legível e fácil de usar.

  • Escrever Funções Pequenas: Funções pequenas são mais modulares, reutilizáveis e fáceis de testar.

  • Seguir Padrões Estabelecidos: Utilizar padrões simples e consistentes para processos como logging.

Top comments (0)