Deletado em 23 de maio de 2010

Recuperando QueryStrings com TryParse

Ultimamente tenho escrito alguns artigos para revistas e sites de tecnologia e a lixeira acaba ficando um pouco vazia.

Entretanto, sempre tem alguma coisa velha que é uma boa nova idéia. Digo velho porque recuperar QueryStrings e variáveis de Sessão em C# até minha tia vó já sabe fazer. Mas será que ela faz da melhor maneira?

Imaginado minha Query String “teste”. “Teste” sempre será a identificação de um elemento que eu gostaria de passar pelas páginas. E outra, eu sei que “teste”  é um inteiro.

Como recuperar?

int meuTeste = Convert.ToInt32(Request.QueryString["teste"]);

Isso é realmente fácil (minha tia vó que postou). Agora vamos falar pra minha tia vó que infelizmente o mundo não é perfeito e podemos ter engraçadinhos que tentam trocar o valor da QueryString manualmente (eu sou um deles). Por Exemplo, colocar um “teste=a” na URL.

Neste ponto minha tia vó sai de cena, isso ela já não sabe. Vamos ser espertos e colocar um Try pra pegar esses engraçadinhos. Mas não podemos ter um Try sem Catch e também não podemos parar a execução da página só porque temos uma variável sem valor (só se a página inteira for em torno desse valor). Neste caso então, vamos verificar se existe o valor da variável na Sessão “teste”, quem sabe o valor não está lá dentro!

int meuTeste = 0;

try
{
    meuTeste = Convert.ToInt32(Request.QueryString["teste"]);
}
catch
{
    meuTeste = Convert.ToInt32(Session["teste"]);
}

Legal, mas e sem não existir QueryString e não existir a Sessão? Minha página às vezes tem essa QueryString e às vezes tem essa Sessão? Vamos aninhar os Trys ai nos Catches nós pegamos zero da variável bla bla bla bla...

Nada disso. Esquece todos os códigos postados até aqui, pois para resolver qualquer problema para recuperar QueryString ou Sessão de tipos nativos devemos usar o TryParse. Digo devemos porque não há o que fazer se o valor que tentamos atribuir à uma variável não for de um tipo valido para mesma, assim evitamos exceções e obtemos valores válidos em qualquer tipo de ambiente.

Como não gosto de ficar sozinho em uma opinião, tenho dois link que além de me defenderem, eles fazem testes de desempenho entre o parse e o TryParse

http://www.informit.com/guides/content.aspx?g=dotnet&seqNum=523

http://www.codinghorror.com/blog/2005/08/tryparse-and-the-exception-tax.html

Entretanto a questão deste post não é escrever sobre conversões de tipos e sim recuperar valores de QueryStrings ou Sessões. Então, como fazer isso de maneira limpa e prática.

Vamos voltar ao mesmo cenário onde a variável de QueryString “teste” pode existir ou não em uma página, assim como a Sessão “teste” pode existir ou não. Lembro também que não podemos esquecer de testar se o valor da QueryString é um inteiro e não vai me jogar uma exceção.

Chegamos as seguintes linhas de código:

int meuTeste = 0;

if (!int.TryParse(Request.QueryString["teste"], out meuTeste))
{
    int.TryParse(Session["teste"], out meuTeste);
}

O código diz que, se não for convertido a QueryString “teste” para minha variável de saída, que é um inteiro, ele tentará converter a Sessão “teste”. Não vamos verificar se ele consegue converter a Sessão, pois se não o valor da variável vai ser 0 de qualquer maneira.

E porque não usar o Convert.ToInt32? Justamente porque vamos ter que ficar testando os valores pra ver se realmente é um inteiro. E fazer esse processo deixa o código cheio e “chato”.

Por fim, podemos fazer o TryParse além de inteiros, em Decimal, DateTime, Float ou Double.

Até a próxima!

Deletado em 19 de maio de 2010

Um pouco de usabilidade

Após a publicação do Blog do meu amigo Tadanori sobre usabilidade, mais precisamente voltado à e-Commerce, achei essa imagem na net que diz muito sobre a realidade de uma empresa e como cada membro de uma determinada equipe tem uma opnião sobre como deve ser a usabilidade de um site.

De acordo com Jakob Nielsen, o maior análista de usabilidade atualmente, dono do lindo site http://www.useit.com/, pesquisas de usabilidade ajudam muito na modo de como um site pode ou não fazer sucesso na Web. Ou seja, usabilidade terá mais espaço aqui na Lixeira futuramente.

Topo