裏口からのC#実践入門

裏口からのC#実践入門 ~バッドノウハウを踏み越えて本物へ!!

裏口からのC#実践入門 ~バッドノウハウを踏み越えて本物へ!!

Xamarinを使って学習する。
ソリューション毎に出力の設定しないとダメなのかな?ちょっと不便。
f:id:yossk:20150125200646j:plain

シーン1 言語仕様の問題

1.1 varの忌避

適材適所でvar使った方がすっきりする。

  • アクマくんの回答
using System;
using System.IO;
using System.Collections.Generic;

namespace Uraguchi
{
    public class Akuma1
    {
        public static void Run()
        {
            Dictionary<string, Action<TextWriter>> dic =
                new Dictionary<string, Action<TextWriter>>();

            dic.Add("sample1", (writer) => { writer.WriteLine("I'm sample1!"); });
            dic.Add("sample2", (writer) => { writer.WriteLine("I'm sample2!"); });
            foreach(var item in dic.Values)
                item(Console.Out);
        }
    }
}
  • テンシちゃんの回答
using System;
using System.IO;
using System.Collections.Generic;

namespace Uraguchi
{
    public class Tenshi1
    {
        public static void Run()
        {
            var dic = new Dictionary<string, Action<TextWriter>>();

            dic.Add("sample1", (writer) => { writer.WriteLine("I'm sample1!"); });
            dic.Add("sample2", (writer) => { writer.WriteLine("I'm sample2!"); });
            foreach(var item in dic.Values)
                item(Console.Out);
        }
    }
}

1-2 ifとswitchの誤用

refキーワードを使うのは好きじゃないので、stringを返すように変更した。
ifとswitch文は自分の中では明確に用途が違うと思ってる。
switch文は題名が明確になっていて「それが何か」を判断しているが、if文はelse ifを使うと相互に関係が無くなっている。

また、caseブロック(?)を一行で書くのは好きじゃないので分けている。
C#はフォールスローを許可してないことは覚えておかないと。
ただ、caseの中身が無い場合は連続で書くことはできる。

  • アクマくんの回答
using System;

namespace Uraguchi
{
    public class Akuma2
    {
        public static string Convert(string color)
        {
            string result = "未知の色";

            if (color == "Red") result = "赤";
            else if (color == "Green") result = "緑";
            else if (color == "Blue") result = "青";

            return result;
        }
    }
}
  • テンシちゃんの回答
using System;

namespace Uraguchi
{
    public class Tenshi2
    {
        public static string Convert(string color)
        {
            string result = "未知の色";

            switch(color)
            {
                case "Red":
                    result = "赤";
                    break;
                case "Green":
                    result = "緑";
                    break;
                case "Blue":
                    result = "青";
                    break;
            }

            return result;
        }
    }
}