Tag > estilo
Patrocinado por
Patrocinado por Inetum

Os blocos de código devem ser curtos

images/thumbnail.jpg - Thumbnail
Infelizmente isto não acontece no código Z dos clientes onde tenho trabalhado. Tanto os IFs como os LOOPs tendem a ser tão grandes que ninguém percebe nada do que lá está. Ainda no outro dia vi um LOOP com mais de 1500 linhas.

Se amas o próximo, evita o CLEAR

images/thumbnail.jpg - Thumbnail
Demasiadas regressões acontecem porque alguém se esquece de fazer CLEAR ou de não fazer CLEAR a uma variável.

As condições IF devem ser simples de entender

images/thumbnail.jpg - Thumbnail
Porque haveria de ser difícil lê-las? Só tornaria mais difícil a vida de quem vier a precisar de a entender. Lá porque uma condição IF é complexa não é por isso que tem de ser complicada.

SELECT WHERE field IN (*, x)

images/thumbnail.jpg - Thumbnail
Vamos por partes. Imagina um cenário em que tens uma tabela de parametrização com vários níveis de detalhe que podem ou não estar definidos: BUKRS (empresa) WERKS (plant) LGORT (depósito) Quando um dos campos está vazio, é um wildcard, ou seja, é válido para todos os valores.

Insere sem excepções em tabelas internas com chave única

images/thumbnail.jpg - Thumbnail
Quantas vezes na tua vida de consultor tiveste de lidar com dumps que aconteceram em consequência de um programa tentar inserir duas linhas com a mesma chave numa tabela interna definida com UNIQUE KEY? Chega.

Funções manequins

images/thumbnail.jpg - Thumbnail
Como é que se há-de traduzir dummy? Fica manequim. Comecei a trabalhar recentemente num cliente novo e reparei que fazem aqui uma coisa que me agradou. Quando precisam de invocar por RFC módulos de função em outros sistemas SAP, criam localmente um módulo de função com o mesmo nome mas sem código, apenas com um comentário explicando que é uma função remota noutro sistema. A virtude disto é que assim pode usar-se a ferramenta where-used para descobrir todos os sítios onde é invocada.

Lookup em tabela sem ter de lidar com a excepção CX_SY_ITAB_LINE_NOT_FOUND

images/thumbnail.jpg - Thumbnail
Antes do 7.40 ter modernizado o ABAP, um lookup a uma tabela obrigava a declarar uma variável auxiliar e a pelo menos 4 linhas de código.

Clean ABAP

images/thumbnail.jpg - Thumbnail
Durante muitos anos, quando entrava em discussões sobre ABAP OO ser melhor do que FORMs, INCLUDEs e CALL FUNCTIONs, o mais comum é a pessoa do lado de lá continuar convencida de que OO é bom nas outras linguagens mas não traz vantagens para o ABAP. Logo a começar pelo atroz código standard SAP que parece ter sido escrito para provar que é possível fazer algo que viola todas as boas prácticas de programação e mesmo assim funciona.

NÃO

images/thumbnail.jpg - Thumbnail
Não, o ABAP nunca vai ter o operador NOT.

MOVE-CORRESPONDING entre duas tabelas respeitando a chave

images/thumbnail.jpg - Thumbnail
O Abapinho não tem falado muito sobre o 7.40 porque as suas novidades têm já sido amplamente descritas em vários sites. Tentamos não inventar a roda. Mas há pequenas pérolas úteis que ainda são pouco conhecidas. Esta é sobre uma delas.

O caminho mais curto para ir de SELECT a RANGE

images/thumbnail.jpg - Thumbnail
Hoje debruçamo-nos sobre como tentar optimizar o código para transformar um SELECT num RANGE.

É tão simples converter uma MESSAGE numa EXCEPTION

images/thumbnail.jpg - Thumbnail
Há alguns anos atrás mostrei como se podia converter uma MESSAGE normal numa excepção tipificada. Entretanto o ABAP evoluiu um bocadinho e agora, na versão 7.40, aquela solução complexa já não é necessária.

A árvore dos pacotes Z - Uma proposta modesta

images/thumbnail.jpg - Thumbnail
Quem lê o Abapinho sabe que eu defendo o uso e abuso do ABAP Package Concept. Hoje em dia a primeira coisa que eu faço quando começo um desenvolvimento novo é criar-lhe um pacote encapsulado que guardará todos os seus objectos que, nos casos mais complexos, será um pacote “Main” ainda subdividido em vários sub-pacotes. Fica aqui a minha modesta proposta para criar uma árvore de pacotes Z que ajude a organizar aquilo que é normalmente uma confusão danada.

IF sem IS INITIAL em métodos booleanos

images/thumbnail.jpg - Thumbnail
O sistema do cliente onde trabalho actualmente foi finalmente actualizado para o 7.50 e, depois de tantos anos preso ao ABAP convencional, posso desfrutar as maravilhas introduzidas no 7.40. São às dúzias essas maravilhas, e não vou começar aqui a fazer artigos sobre cada uma porque já existem artigos espalhados pela net sobre quase todas elas o Abapinho faz sempre o possível por ensinar algo novo ou, pelo menos, pouco conhecido. Mas há uma singela funcionalidade que, não sendo nada de extraordinário, me agrada: já não é preciso fazer IS INITIAL no comando IF quando a condição é um método que retorna um booleano.

Quando o código cheira mal

images/thumbnail.jpg - Thumbnail
É frequente ao programar começar a sentir um cheiro desagradável. Normalmente não consigo logo identificar o que é. Sinto apenas uma leve mas incómoda fragrância. À medida que vou cheirando com mais propósito vou conseguindo perceber de onde vem. Mas mesmo nessa altura, muitas vezes ainda não me é perfeitamente claro porque é que aquele cheiro dali vem.