Acerca de:

Este blog contiene los códigos, ejemplos y bases de datos que he usado cuando aprendía acerca de algún tema específico. En lugar de borrarlos (una vez dominado ya el tema), he decidido publicarlos :)

viernes, 29 de abril de 2011

Haciendo el Test Fizz Buzz con Linq en C#

Leyendo algunos de los muchos blogs de programación flotando por ahí, es muy probable toparse con el Test Fizz Buzz, el que yo ya he usado antes para practicar algunas cosas de programación en C#.
Y por ahí se me ocurrió hacerlo usando Linq. Todo el código es el siguiente:

using System;
using System.Linq;
using System.Collections.Generic;

namespace Operator
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] fbz = new int[100];

            for (int i = 1; i <= 100; i++)
                fbz[i - 1] = i;

            IEnumerable<string> fizbuz = fbz.Select(           
                c=> (c % 3 == 0) & (c % 5 == 0) ? "FizzBuzz" :
                    (c % 3 == 0) ? "Fizz" :
                    (c % 5 == 0) ? "Buzz" : c.ToString() );

            foreach (string c in fizbuz)
                Console.WriteLine(c);

            Console.Read();
        }
    }
}

Una cosa interesante del Linq es que tiene algo llamado "Lazy Evaluation" ó "Evaluación perezosa": la ejecución de las instrucciones no se realiza cuando se declara la interfaz IEnumerable "fizbuz", si no cuando se la recorre con el bucle foreach. De esta forma se pueden tener muchas interfaces pertenecientes a System.Collections y recién ejecutar sus códigos cuando se las recorre con un foreach.
Y luego, para cumplir con las condiciones del test, vuelvo a usar el operador ternario "?", el cual me gusta mucho porque marea cuando se lo ve las primeras veces :D :D

martes, 19 de abril de 2011

C# Code Snippet: Usando el control FontDialog

En una aplicación tipo WindowsApplication tengo un FontDialog, y quiero que cuando el usuario hace click en "Aceptar", los valores de este FontDialog se almacenen en un objeto tipo FontStyle, el que luego se utiliza para crear un objeto tipo Font.

El código es éste:

if (dlgFont.ShowDialog() == DialogResult.OK)
{
  // asigno el estilo de fuente
    myFontStyle =
        dlgFont.Font.Bold ? FontStyle.Bold :
        dlgFont.Font.Italic ? FontStyle.Italic :
        dlgFont.Font.Underline ? FontStyle.Underline :
        dlgFont.Font.Strikeout ? FontStyle.Strikeout : FontStyle.Regular;

    myFont = 
         new Font(dlgFont.Font.Name, dlgFont.Font.Size, myFontStyle);                                          
}

Aquí hago uso del operador ternario '?' para acortar la expresión donde se asigna el tipo de la fuente. Si no uso este operador, la expresión sería:

if (dlgFont.Font.Bold)
    myFontStyle = FontStyle.Bold;
else
    if (dlgFont.Font.Italic)
        myFontStyle = FontStyle.Italic;
    else
        if (dlgFont.Font.Underline)
            myFontStyle = FontStyle.Underline;
        else
            if (dlgFont.Font.Strikeout)
                myFontStyle = FontStyle.Strikeout;
            else
                myFontStyle = FontStyle.Regular;