Novidades no C# 3.0: Inicializadores de Objetos (Object Initializers)
Mais um recurso que está disponível no C# 3.0 é o Inicializador de Objetos. Ele serve para situações onde é preciso criar um objeto e logo em seguida definir os valores das suas propriedades.
No C# 2.0 isto é feito da seguinte forma:

O trecho de código acima instancia um objeto do tipo Computador e carrega as suas propriedades com alguns valores. Além desta forma de inicializar um objeto, existe outra onde a classe possui um construtor que recebe por parâmetro os valores das propriedades e então faz as atribuições, veja:

Essas duas soluções funcionam perfeitamente (ainda bem), mas necessitam de muitas linhas de código. Além disso, se fosse necessário definir o valor de outra propriedade durante a criação do objeto, a segunda forma (utilizando construtores) precisaria de uma alteração no modelo (classe Computador). Um modo muito mais prático de fazer isto é utilizando o recurso de inicialização de objeto, desta forma:

Esta forma é totalmente independente dos construtores da classe. Em outras palavras, se for preciso instanciar um objeto do tipo Computador com somente a propriedade Marca preenchida, basta fazer o seguinte:

Análise do código gerado com o IL DASM
Os testes foram realizados com as três formas de inicialização e seguindo o mesmo estilo do último exemplo: um objeto foi criado e atribuido o valor “HP” à propriedade Marca.
Foi detectada uma grande semelhança no código gerado para os três testes. Na primeira situação, onde o objeto é criado e as propriedades são definidas logo em seguida, o código gerado é este:

Neste caso é criada uma instância da classe Computador, alocada a string “HP” na memória e chamado o método set_Marca para atribuir o valor à propriedade.
Quando a inicialização é feita utilizando o construtor, o número de linhas de código reduz visivelmente (veja na próxima figura). No entanto, qualquer propriedade que for preciso adicionar à inicialização exigirá uma alteração ou sobrecarga dele.

Por fim, o código fonte gerado utilizando Object Initializers é muito parecido (pra não dizer igual) ao do primeiro teste. Ou seja, primeiro cria uma instância do objeto, aloca a string “HP” e depois chama o método set_Marca que define o valor da propriedade. Veja:

Concluindo o assunto, é extremante importante que fique claro qual é a finalidade do recurso Object Initializers. Ele não foi criado para substituir os construtores das classes. Apesar de fazer muito bem este papel em determinadas situações, sua principal utilidade é evitar a inicialização manual de propriedades após a criação do objeto e, consequentemente, reduzir o número de linhas de código.
Novidades no C# 3.0: Propriedades Automáticas (Automatic Properties)
Quem trabalha com o .NET 1.1 ou 2.0 e consequentemente com o C# 2.0, sabe o quanto é chato ter que declarar para todas as propriedades um “método” get, outro set e além disso um field para armazenar a respectiva informação, tal como demonstra a figura abaixo:

Tendo em vista esta dificuldade, a Microsoft adicionou à versão 3.0 da linguagem C# um recurso chamado Automatic Properties. Ele permite ao desenvolvedor omitir a declaração do field e as operações realizadas dentro do get e/ou set. A classe acima foi reescrita utilizando este recurso e está representada na figura abaixo:

Ao analisar com o IL DASM o código gerado para as duas implementações acima, percebe-se que no primeiro caso (utilizando a declaração normal de propriedades) há uma declaração do field exatamente com o mesmo nome do código C# (_nome) e os métodos get_Nome e set_Nome, veja:

Com o recurso de propriedades automáticas o código gerado segue o mesmo estilo, mas com uma pequena diferença na declaração do field, pois ele foi gerado automaticamente pelo compilador. Veja:
Sem dúvida alguma este será um dos recursos mais utilizados pelos desenvolvedores. Além de proporcionar mais praticidade na hora da codificação, também deixará as classes mais enxutas com relação ao número de linhas do código fonte. E aqui vale aquela máxima: quanto menos linhas de código, menor a chance existirem erros.
Live x Google
Ao procurar por gtalk no Live obtive o seguinte resultado:

Um tanto quanto diferente do obtido no Google:

Teoria da conspiração? Alguém sugere alguma?
O poder dos delegates sobre as listas do .NET
A coleção List<T> do .NET Framework possui uma série de métodos que recebem como parâmetro delegates genéricos. Um destes é o Sort, que espera um parâmetro do tipo Comparison<T>. Outro é o RemoveAll, que recebe um Predicate<T>. Mais um deles é o ForEach, que trabalha com um Action<T>.
Tá, mas pra que serve isso tudo?
Partindo do princípio de que no dia-a-dia de grande parte dos desenvolvedores é comum executar ordenação, remoção ou iteração sobre listas, estes métodos servem para dar mais agilidade ao desenvolvimento.
Mas de que forma?
Tomarei como base para os exemplos a seguinte lista:

Uma operação de ordenação, por exemplo, requer uma iteração sobre a lista, comparação dos elementos e remanejamento de suas posições. Com o método Sort tudo isso é resolvido com uma linha de código:


E para remover todos os elementos que iniciem com a letra R? Mais uma vez seria preciso uma iteração sobre a lista e uma comparação para cada elemento. A solução com o método RemoveAll é muito mais prática:


Se isto ainda não convenceu, faço a seguinte pergunta: como você acha que estou mostrando os elementos da lista após a execução dos métodos? Usando for ou foreach? Não! Veja:

Saiba mais sobre isto estudando delegates.
T+
Particionando o HD no Windows Vista
Como bom curioso que sou, dias após chegar meu notebook novo resolvi fazer umas experiências com o Windows Vista. Uma delas foi manter o mesmo esquema do HD anterior: uma unidade para programas instalados (sistema operacional, Office, MSN, Visual Studio, etc) e outra para dados (fotos, instaladores, projetos, etc).
Já que só tenho um HD a solução mais viável foi particioná-lo. Com uma rápida pesquisa na internet encontrei a solução: o próprio Windows Vista possui uma funcionalidade chamada Shrink que reduz o tamanho de uma partição e, consequentemente, gera outra que pode ser formatada e utilizada normalmente.
Conheça mais sobre o Windows Vista com os Livros, DVDs e CDs da Submarino
Todo processo é muito simples e está descrito logo abaixo. As opções que acessei estão com o nome em inglês, mas é fácil achar as equivalentes em português.
- Passo 1: reduzir (shrink) o espaço da partição atual
Dentro do Control Panel na opção System and Maintenance -> Administrative Tools, dê um duplo clique sobre Computer Management. A tela da figura abaixo abrirá e então a opção Storage -> Disk Management deve ser escolhida.

Feito isto, na coluna do meio (Volume) deve aparecer uma lista com as partições atuais do HD e também as unidades de CD e DVD. No meu caso existem quatro volumes: C, D, E e F, sendo que o C é a partição principal e o F é a de dados, portanto meu HD já está particionado.
Para reduzir uma das partições, basta clicar sobre ela com o botão direito e selecionar a opção Shrink Volume, tal como é apresentado na figura abaixo:

Na janela que abriu deve ser informado o novo tamanho da partição. O Windows Vista já sugere alguns valores (veja na próxima figura) que no meu caso serviram perfeitamente, portanto não precisei alterá-los. Caso você precise ou queira saber o que são, segue abaixo uma breve descrição de cada um deles:
- Total size before shrink in MB: tamanho atual da partição (não é possível alterar);
- Size of avaliable shrink space in MB: tamanho disponível para redução (não é possível alterar);
- Enter the amount of space to shrink in MB: tamanho que será reduzido, ou seja, é o tamanho da nova partição (deve ser informado);
- Total size after shrink in MB: tamanho da partição após a redução (não é possível alterar);

Passo 2: criar a nova partição
Quando a execução do shrink terminar, aparecerá um novo item marcado como unallocated na lista de partições do HD. Este item representa um espaço físico do disco rígido que foi separado, mas ainda não está pronto para armazenar dados. Portanto, para que ele possa ser transformado definitivamente em uma nova partição, deve-se clicar com o botão direito do mouse sobre ele e escolher a opção new simple volume, veja:

A partir de agora entra em cena o protocolo NNF (Next, Next and Finish). A primeira tela é um welcome tradicional informando o que será feito. Na segunda deve ser definido o tamanho do volume a ser criado. Eu aceitei o sugerido pelo Windows Vista, que normalmente é o tamanho total disponível, veja:

Na próxima tela deve ser informada a letra que representará a partição. Mais uma vez eu segui o sugerido, ou seja, a letra F, conforme demonstra a figura abaixo:

Logo em seguida os parâmetros sobre a formatação da partição devem ser fornecidos. O único que modifiquei foi o volume label. Utilizei o valor Dados. Para os demais, pode permanecer o sugerido, tal como apresentado na figura abaixo:

Depois disto, uma tela resumindo as opções selecionadas aparecerá. Basta clicar em Finish e aguardar a criação do volume e o particionamento do mesmo. Dentro de segundos (talvez minutos) a nova partição estará criada e pronta para ser usada.
Outras novidades e curiosidades sobre o Windows Vista você pode encontrar no livro Windows Vista: Passo-a-Passo, publicado pela editora Artmed:

Confira o preço deste livro na Submarino
Image Resizer no Windows Vista
Se você procura por uma forma de redimensionar diversas imagens de uma vez só tal como era feito no Windows XP com o Image Resizer Power Toy, deixo aqui a minha sugestão recém testada: VSO Image Resizer.

Através de um simples menu, acessível com o clique do botão direito do mouse sobre uma ou mais imagens, você conseguirá alterar o tamanho e a qualidade dos novos arquivos gerados.
É extremamente prático e substitui com algumas vantagens o Image Resizer Power Toy do Windows XP. Apesar disso, ainda acho que estas funções deveriam fazer parte do Windows Photo Gallery.
É melhor “saber onde” do que “saber como”
Perambulando pelas esquinas da web encontrei dois novos conceitos derivados do know-how: know-where e know-who. Segundo Rochester Oliveira, autor do blog Web Bem Feita, “saber como” fazer alguma coisa é considerado o essencial por muitos. Entretanto, “saber quem” ou “saber onde”, nos dias de hoje, traz mais retorno.
Eu concordo com ele pelos seguintes motivos:
- O conceito de know-how pressupõe um conhecimento amplo e até mesmo total sobre um determinado assunto. Dada a quantidade de informações que temos hoje em dia, isto é inviável;
- Os buscadores com as mais novas tecnologias de indexação e a web mais semântica estão à disposição para responder qualquer pergunta que você não “saiba como” encontrar uma solução;
- É mais interessante, rentável e produtivo ter uma noção básica ou intermediária sobre diversos assuntos (cultura brasileira) do que ser um guru em um específico (cultura norte-americana);
Até +.
Na Trilha da Humanidade
Desde que assisti no programa do Jô uma entrevista com o escritor e jornalista Airton Ortiz passei a ser seu fã. Primeiro encontrei diversas críticas sobre ele no Google. Mais além conheci seu site pessoal. Por fim, comprei alguns livros dele.
Ele tem um perfil de aventureiro. Já viajou por mais de 80 países e escreveu oito livros sobre diversas rotas que já fez mundo afora.
O livro Na Trilha da Humanidade narra uma empolgante viagem de 7 milhões de anos. A origem é o Chade (perto da Líbia e do Sudão), onde foi encontrado o primeiro vestígio humano do planeta, e o destino é o Brasil, terra do aventureiro Airton Ortiz.

Consulte o preço deste livro na Submarino
Na rota desta viagem estão alguns países do continente Africano, o Oriente Médio e a Ásia. Além de todo o espaço territorial percorrido, diversos obstáculos foram encontrados: zonas de guerra, travessia entre países, diferenças culturais, etc.
Para dar um gostinho de “eu quero ler”, vou citar dois fatos que o livro relata:
- Algumas tribros de países africanos acreditam que a AIDS pode ser curada quando o portador do vírus HIV mantém relação sexual com um parceiro jovem;
- Uma massai pode ter tantas esposas quantas vacas ele tiver, pois cada animal pode ser trocado por uma mulher.
Esta obra é, acima de tudo, uma viagem cultural através da evolução do homem na terra.
Gerenciamento de Projetos
Se tem mais algum leitor pretendendo conhecer novas áreas, fica aqui uma dica: Macro Solutions. Não deixe de ouvir os excelentes podcasts sobre gerenciamento de projetos.
T+
