20240519

Clean Code - Comentários

Expresse você mesmo em código e não em comentários


Comentários não são desculpas para nomes ruins 


Use métodos em vez de comentários para segmentar seu código



Escreva comentários para explicar o porquê, e não o quê


O design entra nos documentos de design e não no código



Comente com " e não com *



Coloque comentários antes da declaração a que se referem


Excluir código ao invés de comentá-lo


Não faça versionamento manual


Use FIXME, TODO e XXX e adicione seu ID



Não adicione assinatura de métodos e comentários de fim de linha 



Não duplique os textos das mensagens como comentários






Clean code - Formatação

Ser consistente
  • Sempre use o mesmo estilo de formatação no projeto todo
  • Incentive todos os membros da equipe a fazer o mesmo
  • Se alterar um código estrangeiro, procure seguir o estilo do projeto que está atualizando e não o seu.
  • Use sempre as melhores práticas de refatoração para atualizar seu código ao longo do tempo.

Otimize para leitura e não para a escrita
  • A ideia é tornar seu código mais legível, facilitando o entendimento das demais pessoas que possam ler seu código.
  • Os desenvolvedores gastam mais tempo para ler o código do que para escrever.
  • O funcionais também gastam muito tempo para ler o código durante os debugs. 

Não mais do que uma declaração por linha
  • Usar apenas uma declaração por linha.

Condense seu código
  • Evite adicionar MUITOS espaços entre as informações.
  • Mantenha-os bem condensados.

Adicione uma única linha em branco para separar as coisas, mas não mais
  • Apenas uma linha em branco para separar as instruções diferentes. Não utilize várias linhas em branco. Quando alguém for ler seu código perderá mais tempo.
  • Quando for instruções que tenham correlação, não manter linhas em branco.

Não fique obcecado em separar linhas em branco
  • Normalmente, quando as instruções forem bem simples, tente manter uma instrução embaixo da outra.
  • Quando, pelo menos uma das instruções for mais complexa, com parâmetros, por exemplo, dê uma linha de espaço para que fique bem claro a visualização e entendimento do código.

Fechar colchetes no final da linha
  • Outro ponto que deve ser evitado é manter o colchete de fechamento de uma instrução numa linha sozinha. A visualização fica melhor ao colocá-lo no final da linha (no final da instrução).

Mantenha chamadas de parâmetro único em uma única linha
  • Evite quebrar o parâmetro (único) para deixá-lo na próxima linha.

Mantenha os parâmetros por trás da chamada
  • Quando houver dois ou mais parâmetros, coloque o segundo parâmetro embaixo do primeiro parâmetro e assim sucessivamente.

Se você quebrar, indente os parâmetros sob a chamada
  • Sempre mantenha os parâmetros abaixo do método que o chama.
  • Parâmetros múltiplos, utilizar de quebra de linha
  • Alinhar parâmetros

Não alinhe cláusulas de TYPE
  • Ao utilizar o alinhamento, indiretamente, sugere que existe correlação entre as definições.

Não encadeie atribuições
  • Evite utilizar encadeamento de várias atribuições, como por exemplo:
    var1 =  var2 = var3 .
  • Use uma atribuição por linha.

Clean Code - Condições, IFs

Crie condições positivas


Prefira IS NOT do que NOT IS


Considere Quebrar Condições Complexas


Considere Extrair Condições Complexas


Sem IFs vazios


Prefira CASE do que ELSE IF


Mantenha Alinhamento Simples





Clean Code - Strings e Boolanos

Use crase para literais

  • Ao utilizar crases há uma conversão automática para String internamente.
  • Não utilizar pipe para constantes
Use pipe para montar textos

  • Ao utilizar o pipe com chaves permite várias formatações (Data, Hora e etc...)
Use Booleanos com sabedoria


Use ABAP_BOOL para boolanos


Use ABAP_TRUE e ABAP_FALSE para condições


Para setar variáveis Booleanas, utilize XSDBOOL

Clean Code - Tabelas

Use corretamente os tipos de tabelas


Evite DEFAULT KEY


Prefira INSERT INTO TABLE do que APPEND TO


Prefira LINE_EXISTS do que READ TABLE ou LOOP


Prefira READ TABLE do ue LOOP


Prefira LOOP AT WHERE do que IF


Evite READ TABLE desnecessários

Clean Code - Constantes e Variáveis


Use Constantes ao invés de nomes mágicos



Prefira enumerations classes ao invés de interfaces


Sem o uso de classes, agrupe!


Prefira inline do que Up-Front


Não declare inline em condições


Não encadeie declarações Up-Front


Prefira REF TO do que FIELD-SYMBOLS


 







20240518

Clean Code - ABAP

Versão antiga da Linguagem ABAP
  • Adapte sua versão de utilização do ABAP com as dicas abaixo. Normalmente serão utilizadas as novas maneiras de desenvolvimento. Valide e utilize o que funciona. Vai se acostumando aos poucos com as novidades (que já não são tão novas assim....)  

Cuidado com a Performance
  • Um bom padrão de desenvolvimento pode ter um custo de performance.
  • Métodos - existe validação de tipos de objetos com os tipos que o método necessita. 
    Com a maior utilização de métodos, tende a perder um mínimo de performance, mas a grande maioria das modernizações tem muito mais pontos positivos que negativos.  

Prefira Orientação a Objetos
  • Há muito tempo a Orientação a Objetos já é recomendada. Atualize-se.
  • Esses programas/rotinas são tratados melhor pelos compiladores.
  • Mesmo com utilização de Funções, como por exemplo RFCs, utilize a metodologia de Orientação a Objetos internamente.

Prefira Funções para Construtores de Linguagem
  • Entenda-se aqui que as declarações IN-line são melhores, são mais claras e mais rápidas. 


Evite os Elementos Obsoletos
  • Utilize as novas tendências.
  • Evite ao máximo utilizar Funções e/ou BAPIs obsoletas bem como comandos e declarações de objetos.
  • Sempre que possível utilize as novas sintaxes.

Sabedoria no uso do Design Pattern
  • Só utilize as novas "sugestões" de Clean Code se realmente trouxerem algum ganho.
  • Normalmente, além de um código mais claro para entendimento, as mudanças tendem a serem melhor processadas pelos compiladores. Mas isso não e 100% dos casos 









20240517

Clean Code - Nomenclatura

Nomes descritivos
Sempre o mais explicativo possível.
Não tente corrigir nomes ruins com comentários!

Exemplos.: 
Constants max_wait_time_in_seeonds type i.
Data customzing_entries type standard table ... .
Methods read_user_preferences ...
Class /cleac/user_preference_reader ...

Evitar:
Constants sysubrc_04 type sysubrc.
Data iso3166tab type standard table ... .
Methods read_t005 ...
Class /dirty/t005_reader ...

Nomes que solucionam problemas
Todos os desenvolvedores devem entender os nomes dos objetos.

Plural
Para tabelas (listas) sempre utilizar nomes no plural (vários registros).
Para work-areas utilizar nomes no singular (único registro).

Nomes pronunciáveis
Utilizar sempre nomes pronunciáveis. Evitar "códigos" inexplicáveis...

Correto: detection_object_types
Evitar:    dobjt

Correto: material
Evitar:    matnr

Evitar Abreviações
Escreva o máximo possível.
Se um campo tem limite de 30 posições, para que manter um padrão abreviado com 10 ou 15 posições???
Se for necessário abreviar, abrevie as palavras menos importantes.

Nomes para Classes e Verbos para Métodos
Exemplos:
CLASS ./clean/account
CLASS /clean/user_preferences
INTERFACE /clean/customizing_reader 

METHODS wothdraw
METHODS add_message
METHODS read_entries

if is_empty( table ).

Nomear Funções como Métodos
FUNCTION /clean/read_alerts

Evitar palavras tipadas

Preferir

Evitar

account

account_data

alert

alert_object

user_preferences

user_info

response_time_in_seconds   

response_time_variable


Palavras por conceito
Exemplos
METHODS read_this
METHODS read_that
METHODS read_those

Evitar
METHODS read_this
METHODS retrieve_that
METHODS query_those

Prefixos
Evitar prefixos...

Exemplo:
METHOD add_two_numbers.
     result = a + b.
ENDMETHOD.

Evitar:
METHOD add_two_numbers.
     rv_result = iv_a + iv_b.
ENDMETHOD.















Clean Code - Introdução

Boas práticas para quaisquer linguagens.

Como refaturar códigos antigos?

1. Comunicação entre o time
Todos do projeto devem fazer da mesma maneira. Isso ajuda na manutenção dos objetos para qualquer desenvolvedor.

2. Siga as regras de escoteiro para suas rotinas diárias.
Tente, sempre, deixar o código que você está trabalhando melhor do que você encontrou.
   a) manter 

3. Construa um "clean island"
Sempre que possível, pegue um objeto pequeno ou componente do seu projeto e faça-o mais clean possível.

4. Fale sobre "isso"
Fale sobre suas experiências e aprendizados. Isso ajuda a tornar a equipe mais coesa e com o tempo os códigos estarão mais clean.

Fonte: Descomplicando Linguagens

Antepasto à espanhola ou Patê Feito com pimentão e tomate

Ingredientes:
  • 2 pimentões vermelho grande (Para patê acrescente mais um)
  • 2 tomates maduros grandes
  • 2 pimentas vermelhas sem talo e sem sementes (Apenas para o patê)
  • 1 cebola grande
  • 3 dentes de alho
  • 1 colher (sopa) de açúcar mascavo ou refinado mesmo
  • 2 colheres (sopa) de vinagre balsâmico (1 parte de melado + 1 parte de suco de limão + Um fio de molho de soja (shoyu))
  • Azeite de oliva
  • Pimenta e sal
  • Orégano
Modo de preparo
1. Divida o pimentão em duas partes retire as sementes e corte-o em tiras de 0,5cm, corte os tomates, descarte as sementes faça tiras de 1 a 2 cm, divida a cebola em corte em rodelas finas, fatie o alho em finas lâminas. Corte as pimentas ao meio e retire as sementes e os talos. Lave bem e seque.
   
2. Em uma forma coloque o pimentão, o tomate, a cebola e o alho, tempere com sal, pimenta e orégano, adicione o açúcar mascavo e o vinagre balsâmico e azeite de oliva, misture muito bem todos os ingredientes.

3. Cubra a forma com papel alumínio e leve ao forno preaquecido por aproximadamente 45 minutos em temperatura média. Na metade do tempo acrescente as pimentas (apenas para o patê).

4. Após este tempo retire o alumínio e asse por mais um tempo até reduzir os líquidos. Deixe dar aquela leve grudadinha na forma, pois isso dá aquele sabor especial e levemente caramelizado.
   
5. Os tomates devem ficar pastosos e os pimentões murchos mas mantendo a sua forma.

Se quiser antepasto
    6. Retire da forma coloque em um vidro com mais um pouco de azeite de oliva, sirva quente ou em temperatura ambiente com pães ou torradinhas.
Se quiser patê
    7. Bata no liquidificador todo o conteúdo que saiu do forno com a função pulsar. Coma com torrada, pães e legumes grelhados

Receita original, clique aqui.

Obs.: Tomei a liberdade de adaptar essa receita para patê, pois há muitos anos uma espanhola me ensinou a fazer um patê, mas acabei perdendo a receita e essa foi a mais próxima que consegui encontrar.