image

Acesse bootcamps ilimitados e +650 cursos pra sempre

60
%OFF
Article image
Adrián Scalia
Adrián Scalia05/12/2023 09:25
Compartilhe

Parei de Usar IF e ELSE EM TUDO!!

    Você! sim Você que usa IF o tempo tudo... sabe que existe uma maneira escalável e melhor de fazer essas coisas.

    Uns caras doidones como vc e eu ficarão pensando que as vocês o código fica uma porqueira se passa para outros. kkk só brincando, o desenho de projeto strategy visa em resolver justamente esse problema, os caras pensarão uma forma que se se aplica no código melhora sua capacidade de trabalho em equipe...

    Mas o que é Strategy?

    E muito comum no java ou c# e pode ser usado em situações em que o seu código terá muitas condições, gerando uma corrente de IFs.

    E como faço para aplicar?

    Imagine que existe um objeto Funcionario com suas propriedades e uma classe CalcurarSalario que realiza o reajuste salarial deste funcionário de acordo com sua performance durante o ano.

    Imagem na Capa.^*

    Class CalcurarSalario()

    {

    public void reajustarSalario(Funcionario funcionario)

    {

    Double reajuste = null;

    if(funcionario.getPerformance().equals(Performance.Negativa))

    {

    reajuste = 0d;

    } else if(funcionario.getPerformance().equals(Performance.Positiva))

    {

    reajuste = 0d;

    }

    if(reajuste == null)

    {

    throw new RuntimeExeption("Tipo de perfonmance não implementada");

    }

    Double salarioAntigo = funcionario.getSalario();

    funcionario.setSalario(salarioAntigo + (salarioAntigo * reajuste));

    }

    }

    Atá aqui vc me fala Funciona esta optimo o codigo..... masss o que acontece sim :

    Porém, uma semana após a implementação, vamos supor que o time solicitou a criação de um novo tipo de performance: EXCELENTE.

    vc acresentaria um else if ne:

    else if(funcionario.getPerformance().equals(Performance.Positiva))....

    Claro sendo 3 não tem problema, imagina 200 if ou 50, já tem um problema para debugar e reajustar os %, modificar os nomes

    A forma que nosso queridão resolveria seria assim:

    enum Performance

    {

    Negativa,

    Positiva,

    Excelente,

    Podendo acrescentar muitas mas ou tirar....

    }

    agora vamos por o método dentro de cada....

    enum Performance

    {

    Negativa

    {

    public Double reajustarSalario()

    {

    return 0d

    }

    }

    ,

    Positiva

    {

    public Double reajustarSalario()

    {

    return 0.05d

    }

    }

    ,

    Excelente

    {

    public Double reajustarSalario()

    {

    return 0.10d

    }

    }

    public abstract Double retornaReajusteSalario();

    }

    Agora nosso codigo ficaria assim:

    Class CalcurarSalario()

    {

    public void reajustarSalario(Funcionario funcionario)

    {

    Double reajuste = funcionario.getPerformance().retornaReajusteSalario();

    Double salarioAntigo = funcionario.getSalario();

    funcionario.setSalario(salarioAntigo + (salarioAntigo * reajuste));

    }

    }

    De essa forma podemos acrescentar muitos campos e modificação que alterará a class mas a interface, eliminando fila de If.

    Podendo ser melhor trabalhado por o seguinte programador a vir com só olhar o codigo fica mais limpo.

    Espero que deixe de fazer essas fileiras de iffffff, Muito obrigado pela tua leitura! Desculpa as faltas de ortografia sou Argentino.

    Compartilhe
    Comentários (0)