Começou neste sábado (10/03) o curso de Java que eu estou ministrando no Instituto de Computação da USP de São Carlos.
Trata-se de um curso de extensão, apenas para os alunos do Instituto, mas o material está sendo disponibilizado num grupo do Google sob licença CreativeCommons.
terça-feira, 20 de março de 2007
sábado, 10 de fevereiro de 2007
Verdade! O negócio é assim mesmo!
Os engenheiros de software há muito tempo alertam os seus chefes e clientes de que eles podem ter software "desenvolvido rapidamente, barato ou funcionando direito" contanto que eles escolham quaisquer dois desses fatores. Conseguir os três ao mesmo tempo? Esquece!
Tradução do primeiro parágrafo da introdução do artigo Python Streamlines Space Shuttle Mission Design.
sexta-feira, 5 de janeiro de 2007
if (someString.equals(""))... NullPointerException!!!
Se você programa em Java provavelmente já deve ter feito o seu sistema capotar usando a inocente expressão acima. Isso por que muitas vezes simplesmente não atentamos para o fato de que a referência
Uma boa prática para evitar esse tipo de problema é, sempre que possível, usar expressões literais do lado esquerdo do método. Ou seja, para comparar se uma determinada String é vazia, ao invés de usar
E, é claro, isso não vale só para
Muito bonito, muito bom, mas ninguém vai sair à caça desse tipo de coisa em 247 arquivos só para evitar NPEs. Agora é que vem a automagicação. Expressões regulares, as ER ou regex como são chamadas pelos adeptos do inglês, resolverão o seu problema.
Se você for usuário de Eclipse, dê um Ctrl + F, marque a opção "Regular expressions" e use as seguintes ERs no campo "Find"
A primeira expressão, usada no Find, pega nomes de variáveis válidos em Java e coisas que estejam entre aspas. Na segunda, usada no Replace, a ordem é invertida: as coisas entre aspas (expressões literais) são jogadas para a esquerda e os nomes de referências para a direita. O resultado é que ocorrências do tipo
Qualquer editor que tiver suporte a ERs permitem esse tipo de truque (vi, SciTE, etc). Para quem não está muito acostumado com as ER o Eclipse dá uma ajudinha auto-completando a expressão.
Expressões regulares podem fazer muito mais do que isso, mas já escrevi bastante hoje e fica para a próxima. Se você quiser aprender mais sobre elas consulte a página do Aurélio Verde, é uma ótima referência.
someString pode ser null em algum momento fazendo com que a famosa NullPointerException - a NPE - entre em ação.Uma boa prática para evitar esse tipo de problema é, sempre que possível, usar expressões literais do lado esquerdo do método. Ou seja, para comparar se uma determinada String é vazia, ao invés de usar
someString.equals("") é preferível usar "".equals(someString). Troquei seis por meia dúzia? Na verdade não. Perceba que agora se someString for null o máximo que vai acontecer é que o equals() vai retornar false, como você pode ver nos Javadocs. Aliás, consulte sempre os Javadocs, afinal, decorar tudo anda cada dia mais difícil.E, é claro, isso não vale só para
String, a prática de se usar expressões literais do lado esquerdo do método vale para todos os casos semelhantes a esse nos quais as NPE podem ser evitadas.Muito bonito, muito bom, mas ninguém vai sair à caça desse tipo de coisa em 247 arquivos só para evitar NPEs. Agora é que vem a automagicação. Expressões regulares, as ER ou regex como são chamadas pelos adeptos do inglês, resolverão o seu problema.
Se você for usuário de Eclipse, dê um Ctrl + F, marque a opção "Regular expressions" e use as seguintes ERs no campo "Find"
([\w$][\w\d$]+).equals\((".*")\) e no campo "Replace" $2.equals($1). Agora é só sair clicando em "Replace".A primeira expressão, usada no Find, pega nomes de variáveis válidos em Java e coisas que estejam entre aspas. Na segunda, usada no Replace, a ordem é invertida: as coisas entre aspas (expressões literais) são jogadas para a esquerda e os nomes de referências para a direita. O resultado é que ocorrências do tipo
someString.equals("uma string qualquer") serão substituídas por "uma string qualquer".equals(someString), que nunca vai lançar uma NPE. Isso, graças às ERs, vai funcionar para qualquer que seja o nome da referência (neste exemplo someString, mas poderia ser nomeCliente, cidade, etc) e para qualquer expressão que esteja entre aspas, isto é, qualquer string literal.Qualquer editor que tiver suporte a ERs permitem esse tipo de truque (vi, SciTE, etc). Para quem não está muito acostumado com as ER o Eclipse dá uma ajudinha auto-completando a expressão.
Expressões regulares podem fazer muito mais do que isso, mas já escrevi bastante hoje e fica para a próxima. Se você quiser aprender mais sobre elas consulte a página do Aurélio Verde, é uma ótima referência.
Assinar:
Postagens (Atom)