Sep 26 2007

Novidades no C# 3.0: Inicializadores de Objetos (Object Initializers)

Autor: Marcos Dell Antonio - Categorias: .NET

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:

Inicialização de um objeto através das propriedades

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: 

Inicialização de um objeto através do construtor

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:

Inicialização de um objeto utilizando Object Initializers

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:

Inicialização de somente uma propriedade do objeto utilizando Object Initializers

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:

IL DASM - código gerado para a inicialização de um objeto através das propriedades

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.

IL DASM - código gerado para a inicialização de um objeto através do construtor

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:

IL DASM - código gerado para a inicialização de um objeto utilizando Object Initializers

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.

Comentários 6 comentários

Sep 25 2007

Novidades no C# 3.0: Propriedades Automáticas (Automatic Properties)

Autor: Marcos Dell Antonio - Categorias: .NET

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:

Classe Pessoa

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:

Classe Pessoa

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:

IL DASM da classe Pessoa

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:

IL DASM da classe Pessoa 

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.

Comentários Faça o seu comentário

Sep 25 2007

Live x Google

Autor: Marcos Dell Antonio - Categorias: Cotidiano

Ao procurar por gtalk no Live obtive o seguinte resultado: 

Resultado da busca por gtalk no Live

Um tanto quanto diferente do obtido no Google: 

Resultado da busca por gtalk no Google

Teoria da conspiração? Alguém sugere alguma?

Comentários 1 comentário

Sep 23 2007

O poder dos delegates sobre as listas do .NET

Autor: Marcos Dell Antonio - Categorias: .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:

Lista de nomes

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:

Sort

Resultado do método Sort

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:

RemoveAll

Resultado do método RemoveAll

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:

ForEach

Saiba mais sobre isto estudando delegates.

T+

Comentários Faça o seu comentário

Sep 23 2007

Particionando o HD no Windows Vista

Autor: Marcos Dell Antonio - Categorias: Cotidiano

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.

Windows Vista - Computer Management

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:

Windows Vista - Shrink Volume

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);

Windows Vista - Shrink

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:

Windows Vista - New Simple Volume

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:

Windows Vista - Specify Volume Size

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:

Windows Vista - Assign Drive Letter or Path

Logo em seguida, 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:

Windows Vista - Format

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.

Comentários 50 comentários

Sep 16 2007

Image Resizer no Windows Vista

Autor: Marcos Dell Antonio - Categorias: Cotidiano

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.

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.

Comentários 1 comentário

Sep 15 2007

É melhor “saber onde” do que “saber como”

Autor: Marcos Dell Antonio - Categorias: Cotidiano

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é +.

Comentários 1 comentário

Sep 05 2007

Na Trilha da Humanidade

Autor: Marcos Dell Antonio - Categorias: Uncategorized

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 do livro Na Trilha da Humanidade na Submarino
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.

Comentários Faça o seu comentário

Sep 04 2007

Gerenciamento de Projetos

Autor: Marcos Dell Antonio - Categorias: Cotidiano

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+

Comentários Faça o seu comentário