Postagens

Mostrando postagens de setembro, 2011

Regras para siglas

Eu tinha o costume de colocar um 's no final de siglas, como CPF ou CNPJ, para indicar plural (ex.: "As ONG's têm feito um trabalho excelente na região Nordeste."). ERRADO!!! A regra gramatical para plural de siglas, quando a concordância permitir, é simplesmente acrescentar a letra "s", sem o apóstrofo. Ou seja, a frase acima fica "As ONGs têm feito um trabalho excelente na região Nordeste.". É importante para quem trabalha com exatas não descuidar do conhecimento de lingua portuguesa, pois já dizia Chacrinha: " Quem não se comunica , se trumbica ". Comunicação é tudo, e é sempre bom fazer as coisas da maneira correta. Este link tem mais informações sobre o uso correto de siglas na língua portuguesa: http://www.soportugues.com.br/secoes/abrev/abrev9.php . []'s

Membros ThreadStatic e ASP.NET thread switching: cuidados ao usar

Imagem
Tudo começou com uma dúvida referente como a classe TransactionScope mantém referência à um objeto de transação durante todo o seu escopo de atuação, mesmo quando são feitas chamadas à outros métodos sem a passagem explícita desse objeto de transação como um parâmetro desse método, por exemplo. Olhando o código-fonte do TransactionScope através de ferramentas de disassembler, como o Redgate .NET Reflector ou Telerik JustDecompile (como eu amo esses aplicativos!), percebi que o contexto de transação é armazenado em um membro decorado com o atributo ThreadStatic , ou seja, é praticamente uma "variável global" esclusiva de uma thread, que não pode ser acessada por outra thread. O problema ocorre quando trabalhamos no ASP.NET. Durante o processamento de uma página em ASP.NET, pode (leia-se: "pode", não que ocorrerá sempre!) uma mudança da thread atual (thread switching). Então, uma página que começa a ser processada pela thread 1 pode terminar com a thread 2! Que

Conversões e desconversões

Mais uma pérola que pode ser relacionada com meu outro post Vícios de linguagem de programação : return (Int32.Parse(diff.Days.ToString()) < Int32.Parse(configuracao.Parametro.ToString())); Primeiro detalhe: a variável diff é do tipo TimeSpan, e a sua propriedade Days já é um inteiro. Por que motivo ela é transformada numa string para depois fazer um novo parse para inteiro? Segundo detalhe: a propriedade Parametro da variável configuracao já é uma string. Não há necessidade de chamar o método ToString(). Tem coisa que dá medo...

"".GetType() vs. typeof(string)

No ASP.NET Webforms é possível incluir um javascript para ser renderizado na tela através do método RegisterStartupScript a partir da propriedade ClientScript do objeto Page . Este método então irá, na hora de "cuspir" o HTML, incluir o script de forma com que ele seja executado assim que a página seja carregada no browser. Os dois primeiros parâmetros são um Type e uma string, representando um tipo qualquer e uma chave que são usados para identificar exclusivamente um script, de forma a identificar a duplicidade. Para o primeiro parâmetro, podemos passar o próprio tipo da página onde este script será usado. Mais detalhes em http://msdn.microsoft.com/en-us/library/asz8zsxy.aspx . Bom, no exemplo abaixo, acabou-se usando o tipo como a própria string. Até aí "tudo bem", não vou discutir qual seria o valor correto para passar para este método, mas o que eu fiquei "besta" foi da ocorrência de "".GetType() , de forma a obter uma instância de Type

Vícios de linguagem de programação

Você conhece as expressões “acabamento final”, “elo de ligação”, “subir para cima”, “metades iguais”, “protagonista principal”, entre outras? É o chamado pleonasmo , uma redundância em uma expressão que pode ser uma figura de linguagem (ou seja, o autor quer enfatizar alguma coisa ou ser irônico) ou um vício de linguagem. Mas se temos um pleonasmo em um código-fonte, dificilmente isso foi feito propositalmente. Vamos ver um exemplo “clássico” disso. Vejam o código abaixo. var lista = new List<string>(); // preenche a lista...ou não bool existencia = lista.Count > 0; if (existencia == true) { // faz alguma coisa... } Veja o conteúdo do condicional: existencia == true . Mas o tipo da variável existencia já não é um bool? E no final das contas, um resultado do tipo bool não é o que define a expressão que fica no condicional if ? Sendo assim, o código poderia ser reescrito simplesmente como: var lista = new List<string>(); // preenche a lista...ou não bool existencia = lis