October 25, 2013

Ice Cream Delegates

Because programming concepts are always so much more delicious when you add ice cream to them.

delegate string IceCreamShop(string iceCreamFlavor);

static string Jenis(string iceCreamFlavor)
{
    string betterFlavor = "no jenis for you";

    switch (iceCreamFlavor.ToLower()) {
        case "chocolate":
            betterFlavor = "Askinosie Dark Chocolate";
            break;
        case "vanilla":
            betterFlavor = "Ugandan Vanilla Bean";
            break;
        case "peanut butter":
            betterFlavor = "Buckeye State";
            break;
    }

    return betterFlavor;
}

static string CheapIceCreamStore(string iceCreamFlavor)
{
    string ickyFlavor = "no cheap ice cream for you but that's probably not a bad thing";

    switch (iceCreamFlavor.ToLower())
    {
        case "chocolate":
            ickyFlavor = "mysterious brown stuff";
            break;
        case "vanilla":
            ickyFlavor = "mayonnaise";
            break;
        case "peanut butter":
            ickyFlavor = "dirt";
            break;
    }

    return ickyFlavor;
}

And this is how you use it:

static void Main(string[] args)
{
    IceCreamShop iceCreamShop = Jenis;
    Console.WriteLine(iceCreamShop("chocolate"));

    iceCreamShop = CheapIceCreamStore;
    Console.WriteLine(iceCreamShop("chocolate"));
}

The output is, predictably:

Askinosie Dark Chocolate
mysterious brown stuff

I can also pass in my ice cream shop delegate as a parameter!

static void PrintMenu(List<string> flavors, IceCreamShop iceCreamShop)
{
    foreach (string flavor in flavors)
    {
        Console.WriteLine(iceCreamShop(flavor));
    }
}

static void Main(string[] args)
{
    var flavors = new List<string> { "chocolate", "vanilla", "peanut butter"};

    IceCreamShop iceCreamShop = Jenis;
    Console.WriteLine("Delicious Jeni's menu:");
    PrintMenu(flavors, iceCreamShop);

    Console.WriteLine();

    iceCreamShop = CheapIceCreamStore;
    Console.WriteLine("icky other ice cream store menu:");
    PrintMenu(flavors, iceCreamShop);
}

With the output:

Delicious Jeni's menu:
Askinosie Dark Chocolate
Ugandan Vanilla Bean
Buckeye State

icky other ice cream store menu:
mysterious brown stuff
mayonnaise
dirt

Columbus natives will appreciate the Jeni's reference. If you don't know what Jeni's is, I'm sorry to know that but it's such a good ice cream store that it's spreading across the country and you will hopefully soon know what I am talking about.  I recommend Salty Caramel to all Jeni's first timers.