Netbeans Hacks
De LEC
Este documento é uma Tradução
| Língua original: | Inglªs |
| Texto original: | Netbeans Hacks (Part 1) |
- "Use bem apenas um Ã?ºnico editor - O editor deve ser uma extensão de sua mão; confira que o seu editor seja configurável, extensível e programável." -- The Pragmatic Programmer
Refactor seu código
Editor Hacks
Refactor seu código
Refactoring é o uso de pequenas transformações para reestruturação de código sem mudar o comportamento de qualquer programa.
Just as you factor an expression to make it easier to understand or modify, you refactor code to make it easier to read, simpler to understand, and faster to update.
Assim que vocª factor uma expressão para fazª-lo o mais fácil de compreender ou modificar, código do refactor para fazª-lo mais fácil de ler, mais simples compreender, e mais rápido para atualizar.
And just as a refactored expression must produce the same result, the refactored program must be functionally equivalent with the orginal source.
- Rename - Encontra cada uso do nome em uma classe, variável, ou método, e atualiza todo o código fonte no seu projeto.
- Safely Delete - Confere por referªncias de um elemento do código e somente deleta este se nenhum outro código referªncia esse.
- Move Class - Move uma classe para outro pacote ou para outra classe.
- Pull up - Move o método selecionado para a classe pai desta classe.
- Push down - Ao contrário da opção anterior, empurra o método selecionado para a subclasse desta classe.
- Move Inner to Outer Level - Move uma classe interna um nível acima na hierarquia.
- Convert Anonymous Class to Inner - Converte uma classe anÃ?´nima para uma classe interna que contém um nome e um construtor. A classe anÃ?´nima interna é automaticamente substituída com uma chamada para a nova classe interna.
- Introduce variable - Introduz uma nova variável local para simplificar uma expressão complexa.
- Encapsulate Fields - Cria os métodos get e set para um campo (instância de variável) e opcionalmente atualiza todo código referenciado que acessa o campo usando os métodos get e set.
- Extract method - Cria um método aparir de linhas de código selecionadas e substitui elas por uma chamada desse método.
- Extract Interface - Cria uma nova interface apartir de métodos pÃ?ºblicos não estáticos selecionados numa classe ou interface.
- Extract Superclass - Cria uma nova classe abstrata, muda a classe corrente para extender a nova classe, e move os campos e métodos selecionados para a nova classe.
- Change Method Parameters - Adiciona parâmetros para um método e muda o access modifier(modificador de acesso).
- Use Supertype Where Possible - Muda o código que referencia a classe selecionada(ou outro tipo) ao invés de usar um supertipo daquele tipo.
Vocª deve sempre fazer um clean build depois de completar qualquer comando de refactoring. Pode-se pode fazer um clean build dando um clique com o botão direito no nodo do projeto na janela Projetos, e selecionando Clean and Build Project no menu que aparece.
Geração automática dos Gets e Sets
Ao contrário dos nossos melhores planos, acontece que nós precisamos mudar o tipo de dados que usamos nas classes: o campo que antes era int, agora é um array de int. Se tiver sorte, vocª não deixou o campo pÃ?ºblico ââ?¬â? isso deve tomar um bom tempo para procurar e atualizar todas as classes quebradas que deveriam acessar aquele campo diretamente. Alternativamente, vocª encapsulou o campo:
Encapsular um campo simplesmente é acessar este somente via um método get e set. Se um tipo de dado muda, vocª só precisa atualizar alguns get e set, o que salva um monte de tempo e nervos. Ou clicando com o botão direito no editor, ou indo no menu principal para ver como os comandos de refectorings da IDE podem encapsular rapidamente seus campos criando métodos gets e sets.
- Selecione Refactor > Encapsulate Fields no menu. Um diálogo aparece e lista todos os campos da classe que vocª pode criar os métodos gets e sets. Use este método para criar gets e sets para vários campos de uma Ã?ºnica vez.
- Ou então, posicione o cursor entre as classes, e pressione Ctrl-espaço para chamar a janela Code Completion. Escolha o campo para encapsular, e pressione Enter. Use este método se vocª só quer criar um get, ou um set.
- Ainda existe um terceiro jeito, um método muito intuitivo: De novo, posicione o cursor entre classes. Comece digitando o nome do getter ou setter que se quer gerar, por exemplo getName. Então aperte Ctrl-espaço. A janela Code Completion aparece sugere para "Create getter getName for field name". Aperte Enter para gerar o método.
Outro 'poupador de tempo' legal quando modificamos um método get ou set existentes são os prepend shortcuts. Com estes atalhos, vocª pode por exemplo rapidamente mudar public int size() em public int getSize(). Posicione o cursor antes de um método identificador, e.g. |size().
- Pressione Alt-U e então S para prepend a palavra set.
- Pressione Alt-U e então G para prepend a palavra get.
- Pressione Alt-U e então I para prepend a palavra is (para getters que retornam booleanos).
Note que este é um atalho multi-key.
Corrigindo Import Statements
Quando vocª copia um trecho de código para o seu fonte, este pedaço não contém import statements e o código não compila. Nesses casos, o Editor mostra uma caixa vermelha de alerta perto da linha do código. Se vocª mover o mouse sobre a caixa, uma dica explica que um dos símbolos não pode ser encontrado.
Quando vocª tem certeza que este símbolo existe no path pressione Alt-Shift-F para ter a IDE corrigindo o import statements perdido, automaticamente. Vocª também pode chamar essa função clicando com o botão direito no Editor e selecionando Fix Import Statements.
Abreviando trechos comuns de código
Abreviações salvam um bom tempo: Ao invés de digitar repetidamente os mesmos comuns e tediosos fragmentos de código, vocª digita só algumas letras e então imediatamente aperte a barra de espaço. A IDE substitui o mnemonico por um template inteiro de código.
- Digitando fori e espaço a IDE transforma em...
for (int i = 0; i < args.length; i++) {
|
}
Alternativamente, vocª pode digitar for e pressionar Ctrl-Espaço.
- Digitando sout e espaço a IDE transforma em...
System.out.println("");
- psfs e espaço completa para...
private static final String
Vocª pode verificar a lista dos templates de código selecionando Tools > Options > Editor > Code Templates no menu. Neste painel de preferªncias, vocª também pode definir suas próprias abreviaturas para qualquer código que vocª usa freqÃ?¼entemente. Aqui está a lista dos identificadores especiais que vocª pode usar nos templates.
Implementando Métodos Abstratos Rapidamente
A IDE pode ajudar se seu código não compila. Por exemplo, quando vocª precisa implementar métodos abstratos numa classe que extende uma outra classe. Ainda que vocª não tenha implementado todos os métodos requeridos para a classe compilar, uma caixa vermelha aparecerá perto da declaração da classe.
Posicione o cursor na declaração, e um símbolo de lâmpada aparecerá. Clicando nessa lâmpada sempre aparecerá uma dica de como consertar uma classe. No nosso exemplo a dica deve sugerir para "Implement all abstract methods"(Implementar todos os métodos abstratos).
Para fazer a IDE executar a dica, ou clique nela, ou aperte Alt-Enter. A IDE gera o esqueleto de todos os métodos abstratos necessários, ou o que contenha na dica.
Veja também "Sobrepondo métodos rapidamente".
Sobrepondo Métodos Rapidamente
- Digite o nome dos métodos a sobrepor -- e.g. toString. Então aperte Ctrl-I.
- A caixa de diálogo Override Method aparece: Selecione o(s) método(s) a sobrepor. Se vocª quer sobrepor métodos abstratos, marque "Show Abstract Methods Only"(Mostre somente métodos abstratos). Marque as caixas se vocª quer que a IDE crie os métodos incluindo uma chamada de super, ou copie os comentários do Javadoc. Pressione OK.
- A IDE gera os esqueletos dos métodos para vocª.
Procurando Parâmetros Esperados dos Métodos
Quer saber os argumentos de uma chamada de um métodos? Então pressione Alt-P enquanto escreve a chamada. Isso mostra uma colinha dos argumentos esperados para o método que vocª esta escrevendo.
Travando Exceções Rapidamente
Frequentemente vocª precisa tratar um método com um try-catch porque pode acontecer alguma exceção que deve ser tratada.
import java.io.File;
public class CoffeeMachine {
public CoffeeMachine() {
File f = File.createTempFile("coffee", "tmp");
}
}
Neste exemplo, vocª pode clicar com o botão direito na linha contendo a chamada do método createTempFile() e executar a ação Surround With Try-Catch no menu context (contexto) do Editor. O atalho no teclado para essa ação é Alt-Shift-W. Isso resultará no seguinte código:
import java.io.File; import java.io.IOException;
public class CoffeeMachine {
public CoffeeMachine() {
try {
File f = File.createTempFile("coffee", "tmp");
} catch (IOException e) {
|
}
}
}
A linha que executa uma perigosa operação de I/O foi tratada por um bloco try-catch. Observe que a importação correta foi adicionada na lista das importações também. O cursor se posiciona no bloco catch: Agora é sua vez de escrever o código que responderá ao tratamento da exceção.
Comparando Dois Arquivos
NetBeans tem uma função interna de comparação de arquivos, diff, para destacar diferenças entre dois arquivos. Muitas pessoas conhecem o Diff View do suporte ao versionamento da IDE. Mas vocª sabia que vocª pode ver as diferenças entre dois arquivos mesmo eles não tendo um controle de versão?
- Na janela de Projects(Projetos), clique com o ctrl pressionado para selecionar os dois arquivos.
- clique com o botão direito em um dos arquivos selecionados, e selecione Tools > Diff no menu de contexto.
- Um Diff gráfico aparece mostra todas as diferenças.
Note que Diff somente aparece no menu Tools(Ferramentas) quando dois arquivos estão selecionados e em foco.
Out-Smart Search & Replace
O comando Search & Replace(busca e substituição)(Ctrl-H) suporta buscas por expressões regulares: Por exemplo buscar por 2 caracteres de nova linha "\n\n" encontrará todas as linhas seguidas por uma linha em branco. Infelizmente, o campo Replace With(Substituir por) não suporta expressões regulares ainda. Então o que fazer se vocª quer substituir os dois caracteres de nova linha por um?
Apesar de ainda não interpretar expressões regulares, o campo Replace With já suporta back-references. Isso significa que vocª pode usar uma back-reference to smuggle o caracter de nova linha "\n" dentro do campo Replace With:
Usando esse truque, vocª pode facilmente substituir duas linhas por uma. Claro, isso não se aplicara somente para novas linhas, mas para qualquer expressão regular. Alguns exemplos dos símbolos mais usados em expressões regulares são
- \n, o caracter de nova linha,
- \w, qualquer caractere alphanumerico,
- \t, o caracter tab.
Expressões regulares em conjunto com back-references são ferramentas extremamente poderosas quando estamos tentando substituir um texto. Intrigado? Eles funcionam assim: Basicamente cada substring que é surrounded by brackets nos termos da busca é 'copiado', e pode ser 'colado' no termo a ser substituido. Vocª cola a primeira bracketed substring no termo a ser substituido escrevendo $1, o segundo escrevendo $2, e assim por diante.
Por exemplo, vocª tem uma longa lista de declaração de variáveis:
... public int x; public int y; public int z;
Mas decide que quer que todas sejam privadas e inicializadas em zero:
... private int x = 0; private int y = 0; private int z = 0;
Obviamente, vocª não pode usar o Replace básico devido ao nome Ã?ºnico de cada variável. Os nomes das variáveis são compostos por um ou mais caracteres alfanuméricos; e como uma expressão regular, uma seqÃ?¼encia de caracteres alfanuméricos é expressada como \w+. Sabendo disso, vocª pode capturar os nomes das variáveis pelo termo da busca com o símbolo (\w+), e restaurá-los no termo a ser substituidos chamando o símbolo de back-reference $1.
- Encontrar oq: public int (\w+);
- Substituir por: private int $1 = 0;
Lembre que pode usar $2, $3, etc, para as substrings subseqÃ?¼entes se vocª referencia várias bracketed expressions.
O símbolo $0 carrega todo o termo da busca. Por exemplo, isso é util para fechar cada tag <img ... > em um arquivo HTML substituindo por <img ... />. Numa expressão regular, o símbolo [^] é usado para negação, para isso [^>]+ encontra uma string para qualquer caracteres, mas que não tenham o '>'.
- Encontrar o que: <img [^>]+
- Substituir por: $0 /
Aprenda sobre essa poderosa ferramenta em Jan Goyvaerts's Regular Expression Quick Start. Essa bela feature do editor salva um bom tempo que vocª gastaria fazendo isso manualmente ââ?¬â? E vocª irá impressionar as pessoas com sua velocidade de programação também.
Trocando de Uppercase para Lowercase
Vocª sabia que a IDE do NetBeans pode converter textos UPPER CASE ou lower case?
Selecione a String, então
- pressione Alt-U e então U para todas em uppercase(também conhecido como caixa alta)
- pressione Alt-U e então L para todas em lowercase(também conhecido como caixa baixa)
- pressione Alt-U e então R para inverter a caixa da palavra, ou seja, trocar de upper para lower, ou de lower para upper.
Note que este é um atalho multi-key.
Selecionar pedaços do código rapidamente
NetBeans suporta Smart Selection(Seleção esperta), uma feature muito popular da IDE. Use Smart selection para selecionar pedaços inteiros do código com somente um aperto de teclas: O primeiro seleciona a expressão, a segunda um pedaço, a terceira todo um bloco, a quarta um método, e a quinta toda classe. Como usar:
- Posicione o cursor em uma linha dentro de um método.
- Pressione Alt-Shift-S para selecionar o próximo pedaço maior, ...
- ... e Alt-Shift-A para selecionar o próximo pedaço menor.
Experimente! Smart Selection é extremamente Ã?ºtil quando copiamos e colamos código.
Abrir uma Classe no Editor Rapidamente
Quão freqÃ?¼ente vamos ao Project view, rolamos e procuramos por um arquivo dentro do projeto, e então damos um duplo clique para abrir o arquivo no editor? Fazer isso provavelmente é tranquilo quando trabalhamos em pequenos projetos. Mas conforme o projeto cresce, a árvore hierarquica para rolarmos cresce também. E quando não lembramos em qual pacote a classe que queremos editar está?
Ao invés de navegar pelas árvores do projeto manualmente para achar a classe, abra o arquivo diretamente chamando o diálogo Go To Class(Ir para a Classe)(Alt-Shift-O). Digite as primeiras letras do nome da classe a não ser que seja Ã?ºnica. Pressione enter e o arquivo abre no Editor.
Pular para Métodos e Campos Rapidamente
Ao invés de ficar rolando pra cima e pra baixo pelo editor com o mouse, voce pode navegar muito rapidamente para um método ou campo no editor da fonte:
- Pressione Ctrl-7 para dar o foco ao Navigator.
- Digite neste algumas letras do método, e.g. "ma" para main. Vocª também pode usar as teclas de setas pra cima para baixo para selecionar o próximo item ou o anterior.
- Pressione enter. O arquivo abre se necessário, e o cursor é posicionado diretamente no método ou campo que vocª selecionou.
Note que o Navigator contém tanto um Members view e um Inheritance view da sua classe. Se vocª por o mouse sobre os items do Navigator, ele irá apresentar suas APIs mostrando o Javadoc.
Pular para uma definição de um Método ââ?¬â? e voltar depois
Vocª está fazendo pela primeira vez uma chamada de um método ou variavel numa classe, e You are staring at a method call or variable in a class, e não irá lembrar pelo resto da vida onde e como definiu isso. Não seria ótimo se pudesse pular diretamente para a definição, fazer uma modificação rápida e depois voltar? Vocª pode!
Ponha o cursor do mouse sobre os fontes no Editor e mantenha a teca ctrl pressionada. A cor do texto sob o mouse muda para azul e fica sublinhada, como se fosse um link em um navegador. Com um Ã?ºnico clique com o botão esquerdo, vocª pula diretamente para o fonte onde aquele elemento foi definido. Se o cursor(do teclado) está posicionado dentro do elemento, o atalho Alt-G também te levará para essa definição.
Agora vocª quer voltar para o ponto anterior - Vocª já alguma vez reparou aquela flechinha amarela na barra de edição? Clique nela e ela te levará de volta a qualquer ponto anterior no código! O atalho Alt-K também fará isso.
Ambos o botão de voltar ou o atalho Alt-K pulam de volta para a Ã?ºltima posição do cursor, mesmo se vocª não usou ali o pulo usando link.
Alternando Abas no Editor
Um bom programador quebra o projeto em várias classes com tarefas independentes, certo? Mas o que faz um bom programador fazer quando ele tem muitos arquivos abertos de forma a não caber mais na tela - usa o scroll? Nope: Ele alterna as abas. Abaixo veja como fazer isso:
- Chame a lista de todas as abas abertas no Editor pressionando Ctrl-Tab enquanto mantªm a tecla ctrl pressionada.
- Permaneça com o ctrl pressionado, navegue(para frente) pela lista das abas abertas teclando Ctrl-Tab; navegando(para trás) pela lista apertando Shift-Ctrl-Tab. Ao soltar as teclas a aba na qual está em foco é selecionada.
- Pressionando Ctrl-Tab uma vez e soltando as duas imediatamente, irá alternar para a Ã?ºltima aba usada.
Note que, em alguns sistemas operacionais, Ctrl-Tab já está associada com outra ação conflitante.
Selecionar um Nodo de Arquivo Rapidamente
Vocª tem um arquivo aberto no Editor, como vocª faz para encontrar o mais rápido possível a qual projeto ele pertence? Fácil, vocª diz: Vocª põe o mouse na aba do arquivo, e o tooltip que aparece mostra o path do arquivo.
Mas vocª precisa chamar um comando contexto-sensitivo no nodo do arquivo na Projects View. Obviamente, vocª não quer vasculhar todo o path manualmente, dando um clique duplo em todos os nodos intermediários. Existe um jeito mais fácil? Existe.
- Para abrir e selecionar rapidamente o nodo de arquivos abertos atualmente na Projects view, pressione Shift-Ctrl-1.
- Similarmente, para selecionar o filenode na Files view, pressione Ctrl-Shift-2.
- Para abrir o arquivo na Favorites view, pressione Ctrl-Shift-3.
Note que estes comandos não são somente significativos se a raíz da fonte do arquivo já está aberta no Explorer.





