裏口からのC#実践入門
裏口からのC#実践入門 ~バッドノウハウを踏み越えて本物へ!!
- 作者: 川俣晶
- 出版社/メーカー: 技術評論社
- 発売日: 2014/11/08
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
Xamarinを使って学習する。
ソリューション毎に出力の設定しないとダメなのかな?ちょっと不便。
シーン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; } } }