Páginas

quarta-feira, 24 de dezembro de 2008

Operador yield no C#

Hoje encontrei um operador no C# que desconhecia, o yield.

Ele serve para manter estado quando se percorre uma coleção de objetos, e está intimente ligado à implementação do pattern Iterator dentro do C#. Na prática, ele pode ser aplicado quando temos métodos que retornam um IEnumerable.

No exemplo abaixo, eu tenho um método que percorre as datas de finais de semana (Sábado e Domingo) dado um ano. Veja que este método é chamado dentro de um foreach, e cada iteração ele exibe uma data na tela. Não estou preocupado, dentro do foreach, em saber qual foi a última data que foi exibida, isso é controlado internamente durante a iteração, que vai mantendo o loop "ativo" através do operador yield.

Feliz Natal e até a próxima!

using System;
using System.Collections.Generic;

namespace TesteYield
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Finais de semana de 2009:");
            foreach (DateTime data in ObterFinaisDeSemana(2009))
                Console.WriteLine("{0:dd/MM/yyyy}", data);
            Console.ReadKey(true);
        }

        private static IEnumerable<DateTime>ObterFinaisDeSemana(int ano)
        {
            DateTime pivo = new DateTime(ano, 1, 1);
            while (pivo.Year == ano)
            {
                if (pivo.DayOfWeek == DayOfWeek.Sunday  pivo.DayOfWeek == DayOfWeek.Saturday)
                    yield return pivo;
                pivo = pivo.AddDays(1);
            }
        }
    }
}

terça-feira, 2 de dezembro de 2008

Barbarismo

Estou escrevendo um texto sobre classes customizadas para a leitura de configurações no .NET..., mas senti que a palavra "customizadas", apesar de muito utilizada nas empresas e em especial na área de informática, não soa legal...

Customizar vem da palavra "customize" e que vem de "customer", "cliente" em inglês, ou seja, construir, alterar ou reformar conforme especificações individuais. Pode ser um estrangeirismo, o ato de adotar uma palavra de outra língua se não tivermos uma correspondente. Se tiver uma correspondente, é chamado de barbarismo.

Então, para não correr o risco de um barbarismo, resolvi colocar a palavra "personalizar". Melhor, não?

Senão vou começar a usar termos como "deployar" em vez de "implantar", "buildar" em vez de "compilar", etc..., aí não dá certo, rs.

[]'s