Estilo Alfredo Goldman “Cães latem, gatos tem estilo...” Charles Bukowiski.

35
Estilo Alfredo Goldman

Transcript of Estilo Alfredo Goldman “Cães latem, gatos tem estilo...” Charles Bukowiski.

Page 1: Estilo Alfredo Goldman “Cães latem, gatos tem estilo...” Charles Bukowiski.

Estilo

Alfredo Goldman

Page 2: Estilo Alfredo Goldman “Cães latem, gatos tem estilo...” Charles Bukowiski.

“Cães latem, gatos tem estilo...” Charles Bukowiski

Page 3: Estilo Alfredo Goldman “Cães latem, gatos tem estilo...” Charles Bukowiski.

“Observa-se que os melhores escritores asvezes desrespeitam as regras da retórica. Mas,quando o fazem os leitores geralmente encontramna sentença um mérito compensador, maior do que o custo da violação.A não ser que você tenha certeza de estar fazendoo mesmo, o melhor é seguir as regras.”

Strunk&White - Elementos de Estilo

Page 4: Estilo Alfredo Goldman “Cães latem, gatos tem estilo...” Charles Bukowiski.

ObserveFragmento de código:

if ((country == SING) || (country == BRNI) || (country == POL) || (country == ITALY)) {

/* If the country is Singapore, Brunei or Poland * then the current time is the answer time * rather than the off hook time. * Reset answer time and set day of week. */ ...

Código bem escrito e funciona

Mas pode ser melhorado !!

Page 5: Estilo Alfredo Goldman “Cães latem, gatos tem estilo...” Charles Bukowiski.

PrincípiosEscrever programas é mais do que:

sintaxe correta tirar erros eficiência

Programas são lidos também por pessoas! Um programa bem escrito pode ser entendido

e modificado mais facilmente

Escrever bem => código correto

Page 6: Estilo Alfredo Goldman “Cães latem, gatos tem estilo...” Charles Bukowiski.

PrincípiosSenso comum (confie na experiência)Código claro e simples

lógica direta expressões fáceisnomes com significado

Evitartruquesconstruções não usuais

formato claro comentários bem feitos

Page 7: Estilo Alfredo Goldman “Cães latem, gatos tem estilo...” Charles Bukowiski.

Um exemplo#define ONE 1#define TEN 10#define TWENTY 20

#define INPUT_MODE 1#define INPUT_BUFSIZE 10#define OUTPUT_BUFSIZE 20

Page 8: Estilo Alfredo Goldman “Cães latem, gatos tem estilo...” Charles Bukowiski.

NomesNome de variável/ atributo/ objetoNome de função/ métodoDeve ser

informativo conciso memorizável pronunciável

Page 9: Estilo Alfredo Goldman “Cães latem, gatos tem estilo...” Charles Bukowiski.

NomesVariáveis globais/ classes

Nomes longos e descritivos (lembrar significado)ex:int npending = 0; //tamanho atual da fila de entrada

Variáveis locais Nomes curtos

n pode ser suficientenpoints está OKnumberOfPoints é grande demais

Page 10: Estilo Alfredo Goldman “Cães latem, gatos tem estilo...” Charles Bukowiski.

ExemploCompare:for (theElementIndex = 0; theElementIndex < numberOfElements;

theElementIndex++) elementArray[theElementIndex] = theElementIndex;

Com:for (i = 0; i < nelem; i++) elemen[i] = i;

Page 11: Estilo Alfredo Goldman “Cães latem, gatos tem estilo...” Charles Bukowiski.

Nomes (consistência)Para coisas correlatas use nomes

que mostram a sua relação; evidenciam suas diferenças.

Page 12: Estilo Alfredo Goldman “Cães latem, gatos tem estilo...” Charles Bukowiski.

Exemplo (nomes)Class UserQueue { int noOfItemsInQ, frontOfTheQueue; queueCapacity; public int noOfUsersInQueue() { ...}}

A palavra queue aparece como:Q, queue e Queue

exemplo em uso:queue.queueCapacity = 10;

Page 13: Estilo Alfredo Goldman “Cães latem, gatos tem estilo...” Charles Bukowiski.

Correção (nomes)Class UserQueue { int nitems, front,capacity; public int nOfItems() { ...}}

O que leva a comandos como:queue.capacity = 10;n = queue.nOfItems();

Page 14: Estilo Alfredo Goldman “Cães latem, gatos tem estilo...” Charles Bukowiski.

Nomes de funçõesUse verbos para nomear funções:

ex:now = date.getTime();

Para perguntas booleanas a pergunta deve ser clara:if (checkoctal(c)) ....

if (isoctal(c)) ...

Page 15: Estilo Alfredo Goldman “Cães latem, gatos tem estilo...” Charles Bukowiski.

Seja precisoO nome fornece informações ao leitor

#define isoctal(c) ((c) >=‘0’ && (c) <=‘8’)

ao invés de:#define isoctal(c) ((c) >=‘0’ && (c) <=‘7’)

Page 16: Estilo Alfredo Goldman “Cães latem, gatos tem estilo...” Charles Bukowiski.

Seja preciso (outro exemplo)

public boolean inTable( Object obj) { int j = this.getIndex(obj); // getIndex volta o índice onde obj // está, ou o tamanho da tabela return (j == nTable);}

Page 17: Estilo Alfredo Goldman “Cães latem, gatos tem estilo...” Charles Bukowiski.

Exercício

Comente o seguinte trecho de código:

#define TRUE 0#define FALSE 1

if ((ch = getchar()) == EOF) not_eof = FALSE;

Page 18: Estilo Alfredo Goldman “Cães latem, gatos tem estilo...” Charles Bukowiski.

Expressões e comandosEscreva código claroUse espaçosfor(n++;n<100;field[n++]=‘\0’);*i = ‘\0’; return (‘\n’);

for(n++; n<100; n++) field[n] = ‘\0’;*i = ‘\0’;return ‘\n’;

Page 19: Estilo Alfredo Goldman “Cães latem, gatos tem estilo...” Charles Bukowiski.

Use expressões fáceisDica: Escreva-as como você as

falariaif (!(block_id < actblks) || (block_id >= unblocks)) ...

if ((block_id >= actblks) || (block_id < unblocks)) ...

Page 20: Estilo Alfredo Goldman “Cães latem, gatos tem estilo...” Charles Bukowiski.

Use parentesesNão faz mal a ninguém

leap_year = y % 4 == 0 && y % 100 != 0 || y % 400 == 0;

leap_year = ((y%4 == 0) && (y%100 != 0)) || (y%400 == 0);

Page 21: Estilo Alfredo Goldman “Cães latem, gatos tem estilo...” Charles Bukowiski.

Quebre expressões complicadasPessoas também devem ser capazes de ler o

código

*x += (*xp=(2*k < (n-m) ? C[k+1] : d[k--]));

if (2*k < n-m) *xp = c[k+1];else *xp = d[k--];*x += *xp;

Page 22: Estilo Alfredo Goldman “Cães latem, gatos tem estilo...” Charles Bukowiski.

Tente ser claroAo invés de escrever código conciso escreva

código legível !!!

child = (!LC&&!RC)?0:(!LC?RC:LC);

if (LC == 0 && RC == 0) child = 0;else if (LC == 0) child = RC;else child = LC;

Page 23: Estilo Alfredo Goldman “Cães latem, gatos tem estilo...” Charles Bukowiski.

Cuidado com efeitos colateraisOperadores como o ++ podem ser armadilhas:

str[i++] = str[i++] = ‘ ’;

array[i++] = i;

str[i++] = ‘ ‘;str[i++] = ‘ ’;

scanf(``%d %d’’, &yr, &profit[yr]);

Page 24: Estilo Alfredo Goldman “Cães latem, gatos tem estilo...” Charles Bukowiski.

Melhore os seguintes trechos

if (!(c ==‘y’ || c == ‘Y’)) return ;

length = (length < BUFSIZE) ? lenght : BUFSIZE;

flag = flag ? 0 : 1;

// quais são as saídas possíveis do seguinte printfn = 0;printf(``%d %d\n’’, n++, n++);

Page 25: Estilo Alfredo Goldman “Cães latem, gatos tem estilo...” Charles Bukowiski.

Consistência e IdiomasUse uma indentação consistente e um

único estilo de {}Use a linguagem normalmenteUse os ifs e elses da seguinte maneiraif (condition1) statement1else if (condition2) statement2...else if (conditionn) statementnelse default-statement

Page 26: Estilo Alfredo Goldman “Cães latem, gatos tem estilo...” Charles Bukowiski.

ExercíciosRescreva os seguintes trechos:if (istty(stdin)) ;else if (istty(stdout)) ; else if (istty(stderr)) ; else return(0);

for (k = 0; k++ < 5; x += dx) scanf(``%lf’’, &dx);

Page 27: Estilo Alfredo Goldman “Cães latem, gatos tem estilo...” Charles Bukowiski.

ExercíciosCorrija os erros e rescreva o seguinte trecho:

int count = 0;while (count < total) { count++; if (this.getName(count) == nametable.userName()) { return (true); }}

Page 28: Estilo Alfredo Goldman “Cães latem, gatos tem estilo...” Charles Bukowiski.

MacrosSão muito usadas por

programadores mais antigosNão oferecem nenhum ganho

especialDevem ser evitadas

Page 29: Estilo Alfredo Goldman “Cães latem, gatos tem estilo...” Charles Bukowiski.

Problemas com macros#define isupper(c) ((c) >=`A’ && (c) <=`Z’)

\\ o que acontece na chamadawhile (isupper(c = getchar()) ...

\\ mas pode ser resolvido de forma simpleswhile ((c = getchar() != EOF && isupper(c)) ...

Page 30: Estilo Alfredo Goldman “Cães latem, gatos tem estilo...” Charles Bukowiski.

Problemas com macros\\ podem piorar o desempenho#define ROUND_TO_INT(x) ((int) ((x) + (((x)>0)?0.5:-0.5)))

\\ o que acontece na chamadasize = ROUND_TO_INT( sqrt(dx*dx + dy*dy)); ...

\\ A falta de parenteses pode provocar erros#define square(x) (x)*(x)

\\ a seguinte expressão dá erroa = 1.0 / square(2)

Page 31: Estilo Alfredo Goldman “Cães latem, gatos tem estilo...” Charles Bukowiski.

Números mágicosDê nome aos números mágicos

qualquer número (fora 0 e 1) deve ter um nomeDefina número como constantes

não use macros use enum (em C), const (em C++) e static final

(em Java)Use constantes caracteres, não númerosDeixe a linguagem calcular o tamanho de

objetos

Page 32: Estilo Alfredo Goldman “Cães latem, gatos tem estilo...” Charles Bukowiski.

ExemploComo melhorar as seguintes definições:#define FT2METER 0.3048#define METER2FT 3.28084#define MI2FT 5280.0#define MI2KM 1.609344#define SQMI2SQKM 2.589988

Page 33: Estilo Alfredo Goldman “Cães latem, gatos tem estilo...” Charles Bukowiski.

ComentáriosNão comente o obvio

comente funções e variáveis globais

Não comente código ruim, rescreva-o

Não contradiga o código

Clarifique, não confunda

Page 34: Estilo Alfredo Goldman “Cães latem, gatos tem estilo...” Charles Bukowiski.

ConclusãoEstilo deve se tornar um hábitoIsto se torna automático com o

tempoE naturalmente o código melhora...

(mesmo sob pressão)

Page 35: Estilo Alfredo Goldman “Cães latem, gatos tem estilo...” Charles Bukowiski.

BibliografiaBrian W. Kernighan e Rob Pike.The Practice of Programming. Addison-Wesley, 1999.

Capítulo 1: Style