Código Limpo na Prática com PHP

Escrito por Lucas Scemist em 19/11/2024
PHP Programação Código Limpo
Imagem Ilustrativa de Código.

Clean Code ou código limpo se refere a um conjunto de boas práticas na escrita de software que você pode aplicar para obter uma maior legibilidade e manutenabilidade do seu código.

A busca por Clean Code (Código Limpo) é um dos principais objetivos dos desenvolvedores modernos. Um código bem estruturado não só facilita a manutenção e o entendimento, mas também contribui para o aumento da produtividade e a colaboração eficaz entre equipes. Neste artigo, vamos abordar como implementar práticas de Clean Code no PHP, com exemplos práticos de refatoração e boas práticas.

<?php

class Faxineiro
{
	public function buscarCodigoLimpo(Codigo $codigo): Codigo
	{
		if ($codigo->eLavavel())
			return $this->limparCodigo()

		return $codigo;
	}
}

Implementando Clean Code no PHP: Dicas e Exemplos Práticos

A busca por Clean Code (Código Limpo) é um dos principais objetivos dos desenvolvedores modernos. Um código bem estruturado não só facilita a manutenção e o entendimento, mas também contribui para o aumento da produtividade e a colaboração eficaz entre equipes. Neste artigo, vamos abordar como implementar práticas de Clean Code no PHP, com exemplos práticos de refatoração e boas práticas.

1. Use Nomes Claros e Descritivos

A primeira regra de Clean Code é utilizar nomes de variáveis, funções e classes que descrevam claramente o que estão representando ou fazendo. Evite abreviações excessivas e nomes vagos.

Exemplo ruim:

function calc($a, $b) {
    return $a + $b;
}

Exemplo bom:

function calcularSoma($numero1, $numero2) {
    return $numero1 + $numero2;
}

Neste exemplo, a função foi renomeada para calcularSoma, tornando claro o que ela faz, e as variáveis passaram a ter nomes mais explicativos.

2. Funções Pequenas e Focadas

Funções devem ter uma única responsabilidade, ou seja, fazer uma coisa bem feita. Se uma função estiver tentando realizar múltiplas tarefas, é hora de refatorá-la.

Exemplo ruim:

function processarPedido($pedido) {
    // Verifica estoque
    $estoque = verificarEstoque($pedido);
    // Processa pagamento
    $pagamento = processarPagamento($pedido);
    // Envia email
    enviarEmail($pedido);
}

Exemplo bom:

function verificarEstoquePedido($pedido) {
    return verificarEstoque($pedido);
}

function processarPagamentoPedido($pedido) {
    return processarPagamento($pedido);
}

function enviarEmailConfirmacao($pedido) {
    enviarEmail($pedido);
}

Ao dividir a função processarPedido em funções menores e específicas, o código se torna mais modular e fácil de entender.

3. Evite Comentários Excessivos

Comentários podem ser úteis, mas não devem ser uma desculpa para escrever código ruim ou difícil de entender. Se o código precisa de muitos comentários, provavelmente ele não está bem escrito. Em vez disso, escreva código autoexplicativo.

Exemplo ruim:

// Verifica se o usuário tem permissão de admin
if ($usuario->tipo == 'admin') {
    // Acessa área restrita
    acessarAreaRestrita();
}

Exemplo bom:

if ($usuario->temPermissaoDeAdmin()) {
    $usuario->acessarAreaRestrita();
}

Neste exemplo, a lógica do código foi encapsulada em métodos com nomes descritivos, eliminando a necessidade de comentários.

4. Evite Funções com Muitos Parâmetros

Funções que exigem muitos parâmetros são difíceis de entender e de manter. Uma boa prática é agrupar dados relacionados em objetos ou arrays, em vez de passar múltiplos parâmetros.

Exemplo ruim:

function criarPedido($usuario, $produto, $quantidade, $endereco, $dataEntrega) {
    // Criação do pedido
}

Exemplo bom:

class Pedido {
    private $usuario;
    private $produto;
    private $quantidade;
    private $endereco;
    private $dataEntrega;

    public function __construct($usuario, $produto, $quantidade, $endereco, $dataEntrega) {
        $this->usuario = $usuario;
        $this->produto = $produto;
        $this->quantidade = $quantidade;
        $this->endereco = $endereco;
        $this->dataEntrega = $dataEntrega;
    }
}

function criarPedido(Pedido $pedido) {
    // Criação do pedido com todos os dados encapsulados
}

Neste exemplo, em vez de passar muitos parâmetros avulsos para a função criarPedido, agrupamos as informações em uma classe Pedido, tornando o código mais organizado e fácil de entender.

5. Trate Exceções Adequadamente

Em vez de utilizar verificações manuais de erros, prefira o uso de exceções para controlar falhas e erros inesperados. O uso de exceções ajuda a manter o fluxo do programa mais limpo e facilita a identificação de problemas.

Exemplo ruim:

if (!$arquivo) {
    echo "Erro: não foi possível abrir o arquivo.";
    exit;
}

Exemplo bom:

try {
    $arquivo = fopen("arquivo.txt", "r");
    if (!$arquivo) {
        throw new Exception("Não foi possível abrir o arquivo.");
    }
} catch (Exception $e) {
    echo "Erro: " . $e->getMessage();
    // Log de erro ou tratamento adicional
}

Neste exemplo, o uso de try-catch melhora a estrutura de tratamento de erros e permite que o código lide com falhas de forma mais controlada.

6. Organize seu Código em Funções e Classes Coesas

Mantenha seu código bem organizado, dividindo-o em classes e funções coesas. Evite funções e classes que tentem fazer tudo de uma vez. Cada módulo deve ter uma única responsabilidade.

Exemplo ruim:

class Pedido {
    public function criarPedido($usuario, $produto, $quantidade, $endereco) {
        // Criar pedido
        // Verificar estoque
        // Processar pagamento
        // Enviar email
    }
}

Exemplo bom:

class Pedido {
    public function criar($usuario, $produto, $quantidade, $endereco) {
        // Criar pedido
    }
}

class Estoque {
    public function verificar($produto, $quantidade) {
        // Verificar estoque
    }
}

class Pagamento {
    public function processar($pedido) {
        // Processar pagamento
    }
}

class Notificacao {
    public function enviarEmail($pedido) {
        // Enviar email
    }
}

Ao dividir a responsabilidade entre várias classes, o código fica mais modular e fácil de manter.

7. Use o Padrão PSR

Seguir as PSRs (PHP Standards Recommendations) é uma ótima forma de garantir que o código seja legível e padronizado, especialmente quando várias pessoas trabalham no mesmo projeto. Algumas das PSRs mais comuns são:

Conclusão

Implementar Clean Code no PHP é essencial para criar sistemas mais eficientes, legíveis e fáceis de manter. Ao adotar práticas como usar nomes descritivos, escrever funções pequenas e focadas, evitar comentários excessivos e tratar exceções adequadamente, você melhora não apenas a qualidade do código, mas também a colaboração entre desenvolvedores e a escalabilidade do projeto.

Com essas dicas e exemplos práticos, você está pronto para refatorar seu código PHP e aplicar as melhores práticas de Clean Code. Lembre-se: código limpo não é apenas sobre estética, é sobre criar soluções que sejam sustentáveis no longo prazo.