São Luis - MA

Clean Code não é tudo!

Mas é 100%

Alessandro Feitoza

PHP Evangelist

Symfony / PHP Developer

PHP com Rapadura

Código Limpo!

  • Apenas algumas dicas de como deixar o código manutenivel.
  • Tentar fazer códigos profissionais que garantem uma boa legibilidade.

Uncle Bob

Vamos aos pobremas!

  • Falta de dominio na linguagem
  • Prazo apertado
  • Código escrito "nas côxas"
  • Falta de refatoração
  • GoHorse
  • "Não sou pago pra isso"

Tudo isso cria um alojamento para bugs

Heróizão!

"Chefe" dos prazos

Dev: "chefe, vou ter q atrasar a entrega"

Chefe: "Rapaz, te vira. Lá em cima daquele armário tem uma caixa, aí tem uma roupa verde, de sapo, pega ela, veste e dá teus pulo."

"Chefe" com pitada de motivação

Dev: "chefe, vou ter q atrasar a entrega"

Chefe: "Rapaz, confio na sua capacidade."

#FAZTEUNOME

Isso tudo cria código ruim.

E código ruim sai muito caro, impede melhorias e dificulta a liberdade.

Então simbora aprender a fazer código limpo.

Mas o que é Código Limpo pra você?

"nomes de variáveis limpas, nomes de funções limpas, nomes de classes limpas. Estruturas do código de facil entendimento, códigos explícitos."

Uncle Bob

"código elegante e eficiente com lógica direta que dificulte um alojamento para bugs"

Bjarn Stroustrup

Somos todos Autores

  • Um autor escreve um capitulo que vai ser lido de cima pra baixo.
  • Você lê, e dificilmente volta pra ver o que leu pra entender.
  • Uma escrita romantica é diferente de uma escrita técnica. Quanto mais romantica mais facil do leitor entender.

1 - Nomes Significativos

$a = 'Alessandro';
$b = 'eu@alessandrofeitoza.eu';
$c = 22;
$d = 'tesudo';
$name = 'Alessandro';
$email = 'eu@email.eu';
$idade = 22;
$nickname = 'tesudo';

Use nomes que revelem o propósito.

1 - Nomes Significativos

o = 1;

if (o == 1) {
    a = 0l;
} else {
    a = o1;
}

Não crie problemas para si mesmo

1 - Nomes Significativos

public function dtaRcd102();
public function svUsGroup();

Crie nomes pronunciaveis

public function dataRecord();
public function saveUserInGroup();

2 - Funções

 

  • Crie funções pequenas e Objetivas.
  • Uma função tem a função de fazer apenas uma coisa.
  • Ler o código de cima pra baixo.
  • Poucos Parametros (máximo 3)
  • Prefira exceções a retorno de erros em forma de código

2 - Funções

  • Tratamento de Erro é uma coisa
try {
    if ( x() ) {
        $this->facaIsso();
    }

    $this->comandoGeral();
} catch (\Exception $exception) {
    try {
        comando1();
        comando2();
        comando3();
    } catch (\Exception $exception) {
        return false;
    }
}

3 - Comentários

  • Evite comentários, isso lhe obriga a criar código auto explicativos;
  • Não faça um diário de bordo (meu querido código)
  • Evite explicar o óbvio
  • Comentários podem se voltar contra você.

4 - Formatação

  • Cuidado com o comprimento horizontal;
  • Cuidado com o comprimento vertical;
  • Cuidado com o comprimento;
  • Dê espaço entre os comandos que não fazem sentido próximo;
  • Agrupe códigos que façam uma coisa dependente da outra;
  • Endente!

5 - Tratamento de Erro

  • Trate os erros como gostaria de ser tratado (com atenção)
  • Gere Exceções ao invés de códigos de erro;
  • Crie o try - catch antes do restante do código
  • Defina suas exceções de acordo com sua necessidade;
  • Não retorne Null
  • Não passe null

5 - Tratamento de Erro

class InvalidNumberException extends \InvalidException
{

}

class EmailServiceException extends \Exception
{

}

6 - Teste de Unidade

  • Faça TDD
  • Refatore
  • Faça mais TDD
  • Teste limpos;
  • Testes de acordo com o dominio da Aplicação;

7 - Classes

  • Classes Pequenas e Objetivas
  • Agrupe as Classes de acordo com o módulo do dominio
  • Responsabilidade Única
  • Cuidado com o alto acomplamento
  • Estude SOLID

8 - Não repita

  • Responsabilidade única
  • Nada de ambiguidades
  • Modificações únicas

Ah, mas PHP é feio!

PHP 7

PHP 7.4

class User
{
    /** @var string $name */
    private $name;

    /** @var string $email */
    private $email;

    /** @var int $old */
    private $old;

    /** @var bool $status */
    private $status;

    /** @var Address $address */
    private $address;
}
class User
{
    private string $name;

    private string $email;

    private int $old;

    private bool $status;

    private Address $address;
}

Typed Properties

Tem muito mais coisa.

#FazTeuNome!

#FazTeuCódigo!

Dúvidas

Qualquer programador consegue fazer códigos pra computadores entenderem, mas apenas Bons Programadores fazem código que humanos entendem.

Martin Fowler

Recomendo ler também.

Dica de Evento

16 e 17 de Maio de 2019 / São Paulo - SP

live.symfony.com

Dica de Evento

08 e 09 de Junho de 2019 / Fortaleza-CE

php.darkmiratour.rocks/

Dica de Dicas

facebook.com/hashtag/PHPnaMarra

twitter.com/hashtag/PHPnaMarra

Valeu o Boi!

Alessandro Feitoza

eu@alessandrofeitoza.eu

@feitozaAle

phpcomrapadura.org

[PHPeste] - Clean Code não é tudo!

By Alessandro Feitoza

[PHPeste] - Clean Code não é tudo!

Slide sobre Clean Code na Palestra de PHPeste.

  • 141
Loading comments...

More from Alessandro Feitoza