Palestra sobre como aplicar princípios de projeto orientado a objetos e fazer código confiável e eficiente em Java. Serão abordadas boas práticas lidando com Strings, números, coleções, nulos, assinaturas de métodos, passagem de parâmetros, etc, e como encontrar maus cheiros no código e aplicar refatorações.
Autor: Márcio Josué Ramos Torres (IFRS)
7. Strings: concatene com
StringBuilder
●
Evite a concatenação de Strings, se for o
caso, use StringBuilder.
Ao invés disto:
String var = sobrenome + “, “ + nome + “; ”;
Faça isto:
String var = new StringBuilder(sobrenome)
.append(“, “)
.append(nome)
.append(“; “);
8. CONHECER A API
VOCÊ DEVE
Cuidado para não reinventar a roda
9. Strings: declare Strings
literalmente
●
Não use new para declarar uma String
Ao invés disto:
String var = new String(“Texto”);
Faça isto:
String var = “texto”;
10. Strings: compare com o
método equals
●
Não use == para comparar Strings. O
operador compara a referência da variável.
Ao invés disto:
boolean igual = sobrenome == nome;
Faça isto:
boolean igual = sobrenome.equals(nome);
11. Strings: compare o literal
com a variável
●
Evite comparar uma variável com uma
String, tu podes receber uma
NullPointerException
Ao invés disto:
boolean igual = sobrenome.equals(“silva”);
Faça isto:
boolean igual = “silva”.equals(sobrenome);
12. Números: use primitivos
sempre que possível
●
No Java existem duas maneiras de
representar caracteres, números e boleanos,
usando primitivos (char, byte, short, int,
long, float, double, boolean) ou suas versões
Objeto (Character, Byte, Short, Integer,
Long, Float, Double, Boolean).
●
Evite usar Wrappers quando são realizados
cálculos e a performance e o footprint sejam
importantes
13. USE SEU IDE
COM SABEDORIA
Aproveite os atalhos, geradores de código e
demais recursos do seu IDE para tornar-se
produtivo
Mas saiba se virar sem ele
14. Números: use BigDecimal
para cálculos precisos
●
Evite usar double e float para operações que
necessitam de precisão.
Ao invés disto:
double salario = 2551.25;
Faça isto:
BidDecimal salario = BidDecimal.valueOf(2551.25);
15. USE A FORÇA
Experimente programar usando a intenção, declare
seu desejo e então subjugue o código a sua
vontade ...
16. Números: use Wrappers
para representar o nulo
●
Mas cuidado com a NullPointerException
Ao invés disto:
double taxa;
Faça isto:
Double taxa;
17. Coleções: parametrize
suas coleções
●
Não use arrays e evite usar ArrayList ou
HashSet sem parametrizar o tipo.
Ao invés disto:
String[] nomes = new String[10];
Faça isto:
List<String> nomes = new ArrayList<String>();
18. Coleções: devolva uma
lista vazia ao invés de nulo
●
Evite devolver nulo.
●
Em um método que devolva uma coleção
prefira devolvê-la vazia.
Ao invés disto:
public List<Algo> getLista() {
return lista;
}
Faça isto:
public List<Algo> getLista() {
if (lista == null) return Collections.emptyList();
return lista;
}
19. Ao desenvolver a API pública de seus módulos
pergunte-se a cada tipo de entrada, válida ou inválida,
qual o retorno que não surpreenderia ...
20. Coleções: sempre sobrescreva
equals e hashCode
●
Os métodos equals e hashCode são usados
em conjuntos (Set) e outras coleções
baseados em hash (como o HashMap).
21. Métodos: não passe nulo
como parâmetros
●
Prefira a sobrecarga a passar nulo nos
parâmetros
●
Se o método tem muitos parâmetros aplique
a refatoração Objeto Parâmetro
Ao invés disto:
printer.print(null, null, 2, null, doc);
Faça isto:
printer.print(2, doc);
class Printer {
public void print(int copias, Document doc) {
}
22. NÃO SE REPITA
Projete tendo o princípio DRY (Don't Repeat Yourself) em
mente. Cada parte de código deve ser expresso em único
ponto e sem ambiguidades
23. Métodos: escreva métodos
pequenos e legíveis
●
Se o método crescer muito decomponha em
métodos menores, aplique a refatoração
Extrair Método
24. Estruturas: use
Enumerados para opções
●
Não use Strings, Números ou Boleanos para
opções
Ao invés disto:
mailer.send(true);
Faça isto:
mailer.send(Prioridade.ALTA);
25. SEMPRE QUE UM
COMENTÁRIO VOCÊ FOR
ADICIONAR, A SI MESMO
PERGUNTE: “COMO POSSO EU
ESSE CÓDIGO MELHORAR
POSSO PARA QUE
DESNECESSÁRIO ESSE
COMENTÁRIO POSSA SER”
26. Estruturas: crie novas classes
para grupos de dados
●
Evite grupos de dados criando novas classes
●
Evite a Obsessão Primitiva
Ao invés disto:
class Rota {
int distancia;
}
Faça isto:
class Rota {
Distancia distancia;
}
27. SIGA O PRINCÍPIO DE
ACESSO UNIFORME
Forneça acesso às propriedades e serviços de
seus objetos através de uma notação uniforme
escondendo se eles são obtidos através de
armazenamento ou computação ....