Executando verificação de segurança...
5

Return Early - Padrão com PHP

Hoje eu vou falar sobre uma técnica que eu utilizo para desenvolver códigos mais legíveis com o intuíto de facilitar a leitura e o entendimento.

Lets Bora!

Primeiro irei mostrar um exemplo de código que geralmente fizemos.

<?php

// Tenta criar uma conta, recebe E-mail e Senha como parametro, caso de erro é lançada uma exeção.
public function create(string $email, string $senha, string $senhaRepetida): Exception | string
{

    if(!empty($email) OR !empty($senha)){

        if(str_contains($email, '@') == true){

            if(strlen($senha) > 16){

                if($senha === $senhaRepetida){

                    if(!$this->authRepositorio->getAccountByEmail($email)){

                        if($this->authRepositorio->create($email, $senha)){

                            return 'Conta Criaca com sucesso!';

                        }else{
                            throw new Exception('Não foi possível criar sua conta, tente mais tarde.');
                        }
                    }else{
                        throw new Exception('Já existe uma conta cadastrado com esse e-mail');
                    }

                }else{
                    throw new Exception('As senhas não estão iguais.');
                }

            }else{
                throw new Exception('Senha muito fraca.');
            }
        }else{
            throw new Exception('E-mail inválido.');
        }
    }else{
        throw new Exception('Preencha o e-mail e senha.');
    }
}

Agora vou mostrar como eu faria essa mesma função utilizando a técnica no return early!

<?php

public function create(string $email, string $password, string $passwordRetry): Exception | string
{

    if(empty($email) || empty($password)){
        throw new Exception('Preencha o e-mail e senha.');
    }
    
    if(strlen($password) <= 16){
        throw new Exception('Senha muito fraca.');
    }

    if($password !== $passwordRetry){
        throw new Exception('As senhas não estão iguais.');
    }

    if($this->authRepository->getAccountByEmail($email)){
        throw new Exception('Já existe uma conta cadastrado com esse e-mail');
    }

    if(!$this->authRepository->create($email, $password)){
        throw new Exception('Não foi possível criar sua conta, tente mais tarde.');
    }

    return 'Conta Criaca com sucesso!';
}

Por hoje é isso pessoas!

Carregando publicação patrocinada...
1

Muito bom! Esse é uma técnica que realmente ajuda a deixar o código mais legível pois diminui a carga mental de ler vários if's aninhados.

1

Para o primeiro código podemos nomeá-lo como código Hadooken. Alguém já ouviu isso ou só eu? É uma referencia a um golpe de um jogo chamado street fighter e se quiser entender é só digitar no google "código hadooken" e ver as imagens que fica bem claro. Se ver um código hadooken pode confiar que tá mal feito.

Outra coisa importante, no meu ponto de vista, é que ao dividir as condicionais (ifs) deve-se pensar na ordem de maior probabilidade para a de menor probabilidade.

1

Isso ajuda muito, se vc juntar com um sistema modular, onde cada função faz uma coisa especifica
cada função é especialista por algo ajuda de mais a manutenção, reutilização de codigo, desenvolimento, n varios fatores.

1
1