知って得するC#

6,173 views

Published on

Published in: Technology, Design
0 Comments
18 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,173
On SlideShare
0
From Embeds
0
Number of Embeds
411
Actions
Shares
0
Downloads
42
Comments
0
Likes
18
Embeds 0
No embeds

No notes for slide

知って得するC#

  1. 1. 知って得する C# 株式会社ハ・ン・ド プログラマ 馬場翔太 http://baba-s.hatenablog.com/
  2. 2. スライド内容 1. C#の機能紹介 2. C#のツール紹介
  3. 3. C#の機能紹介
  4. 4. クラスの定義を複数のファイルに分ける partialキーワード // CharacterA.cs public partial class Character { private int id; } // CharacterB.cs public partial class Character { private string name; } http://d.hatena.ne.jp/pknight/20130206/1360151414
  5. 5. 値型でnullを扱う null許容型 int? x = 123; int? y = null; http://ufcpp.net/study/csharp/sp2_nullable.html http://bleis-tift.hatenablog.com/entry/cmp_Option_Nullable
  6. 6. nullチェックと代入をスマートに書く ??演算子(null合体演算子) // 条件演算子の場合 z = x != null ? x : y; // ??演算子の場合 z = x ?? y; http://d.hatena.ne.jp/pknight/20130206/1360145446 http://odashinsuke.hatenablog.com/entry/20090522/1243002878
  7. 7. Unityにおける??演算子の使用例(1) // if文の場合 var boxCollider = gameObject.GetComponent<BoxCollider>(); if (boxCollider == null) { boxCollider = gameObject.AddComponent<BoxCollider>(); } http://udasankoubou.blogspot.jp/2013/08/unitynull.html
  8. 8. Unityにおける??演算子の使用例(2) // ??演算子の場合 var boxCollider = gameObject.GetComponent<BoxCollider>() ?? gameObject.AddComponent<BoxCollider>(); http://udasankoubou.blogspot.jp/2013/08/unitynull.html
  9. 9. インスタンス生成が不可能なクラスを作る staticクラス // privateコンストラクタの場合 public class MyClass { private MyClass(){} } // staticクラスの場合 public static class MyClass { } http://ufcpp.net/study/csharp/oo_static.html#class http://ykimisaki.hatenablog.jp/entry/2013/07/10/220545
  10. 10. ローカル変数の型の宣言を省略する(1) varキーワード // varキーワードを使わない場合の宣言 string name = ""; MyClass obj = new MyClass(); Dictionary<string, MyClass> dict = new Dictionary<string, MyClass>();
  11. 11. ローカル変数の型の宣言を省略する(2) varキーワード // varキーワードを使う場合の宣言 var name = ""; var obj = new MyClass(); var dict = new Dictionary<string, MyClass>();
  12. 12. 既存の型にメソッドを追加する(1) 拡張メソッド // 文字列を大文字に変換する(通常の関数の場合) public static class StringUtility { public static string UpperCase(string str) { // ... } } str = StringUtility.UpperCase(str); http://ufcpp.net/study/csharp/sp3_extension.html
  13. 13. 既存の型にメソッドを追加する(2) 拡張メソッド // 文字列を大文字に変換する(拡張メソッドの場合) public static class StringUtility { public static string UpperCase(this string str) { // ... } } str = str.UpperCase(); http://ufcpp.net/study/csharp/sp3_extension.html
  14. 14. Unityにおける拡張メソッドの使用例(1) // エラー transform.position.x = 0; // OK var pos = transform.position; pos.x = 0; transform.position = pos; http://kou-yeung.hatenablog.com/entry/2013/11/18/233000
  15. 15. Unityにおける拡張メソッドの使用例(2) // 通常の関数の場合 public static class TransformUtility { public static void SetPositionX(Transform transform, float x) { var pos = transform.position; pos.x = x; transform.position = pos; } } TransformUtility.SetPositionX(transform, 0); http://kou-yeung.hatenablog.com/entry/2013/11/18/233000
  16. 16. Unityにおける拡張メソッドの使用例(3) // 拡張メソッドの場合 public static class TransformUtility { public static void SetPositionX(this Transform transform, float x) { var pos = transform.position; pos.x = x; transform.position = pos; } } transform.SetPositionX(0); http://kou-yeung.hatenablog.com/entry/2013/11/18/233000
  17. 17. オブジェクトの初期化をスマートに書く(1) 初期化子 // Add関数による初期化(List型) var list = new List<int>(); list.Add(1); list.Add(2); list.Add(3); // 初期化子による初期化(List型) var list = new List<int>{ 1, 2, 3, }; http://cs.hatenablog.jp/entry/2013/06/24/190945
  18. 18. オブジェクトの初期化をスマートに書く(2) 初期化子 // Add関数による初期化(Dictionary型) var dict = new Dictionary<string, int>(); dict.Add("one", 1); dict.Add("two", 2); // 初期化子による初期化(Dictionary型) var dict = new Dictionary<string, int>() { { "one", 1 }, { "two", 2 }, }; http://cs.hatenablog.jp/entry/2013/06/24/190945
  19. 19. 一時的に利用する型の定義を省略する 匿名型 // 匿名型を使わない定義の場合 var characterId = 0; var characterName = ""; // 匿名型を使う定義の場合 var character = new { Id = 0, Name = "" }; // character.Id // character.Name http://ufcpp.net/study/csharp/sp3_inference.html
  20. 20. 配列を作成する際に型を省略する 暗黙型付け配列 // 通常の配列作成 var array = new string[] { "1", "2", "3", "4", }; // 暗黙型付け配列 var array = new [] { "1", "2", "3", "4", }; http://gushwell.ldblog.jp/archives/51115733.html
  21. 21. 引数の順序を自由に書く 名前付き引数 static int Sum(int x = 0, int y = 0, int z = 0) { } int s1 = Sum(x: 1, y: 2, z: 3); int s2 = Sum(y: 2, z: 3, x: 1); int s3 = Sum(y: 1); http://noriok.hatenadiary.jp/entry/2013/08/18/014408
  22. 22. 高速な繰り返し処理を書く(1) ForEachメソッド // foreach文の場合 foreach (int n in list) { Console.WriteLine(n); } http://www.atmarkit.co.jp/fdotnet/extremecs/extremecs_03/extremecs_03_12.html
  23. 23. 高速な繰り返し処理を書く(2) ForEachメソッド // 配列の場合 Array.ForEach(array, n => Console.WriteLine(n)); // List型の場合 list.ForEach(n => Console.WriteLine(n)); http://www.atmarkit.co.jp/fdotnet/extremecs/extremecs_03/extremecs_03_12.html
  24. 24. 検索に特化したメソッドを使う(1) Findメソッド // foreach文の場合 var result = 0; foreach (var n in list) { if (n == 0) { result = n; } } http://www.atmarkit.co.jp/fdotnet/extremecs/extremecs_04/extremecs_04_03.html
  25. 25. 検索に特化したメソッドを使う(2) Findメソッド // 配列の場合 var result = Array.Find(array, n => n == 0); // List型の場合 var result = list.Find(n => n == 0); http://www.atmarkit.co.jp/fdotnet/extremecs/extremecs_04/extremecs_04_03.html
  26. 26. newで生成するオブジェクトを定数にする static readonly // OK private const int MaxValue = 100; // エラー private const Vector2 Position = new Vector2(100, 100); // OK private static readonly Vector2 Position = new Vector2(100, 100); http://msdn.microsoft.com/ja-jp/library/aa645753.aspx
  27. 27. 安全にキャストする as演算子 // 失敗したら例外発生 var str = (string)obj; // 失敗したらnullを返す var str = obj as string; http://ichitcltk.hustle.ne.jp/gudon/modules/pico_rd/index.php?content_id=131
  28. 28. 読み取り専用の配列やリストを作る(1) ReadOnlyCollectionクラス private List<int> datas = new List<int>(); // ReadOnlyCollectionを使用しないで公開 public List<int> Datas { get { return datas; } } http://fernweh.jp/b/csharp-readonly-collections/
  29. 29. 読み取り専用の配列やリストを作る(2) ReadOnlyCollectionクラス private List<int> datas = new List<int>(); // ReadOnlyCollectionを使用して公開 public ReadOnlyCollection<int> Datas { get { return datas.AsReadOnly(); } } http://fernweh.jp/b/csharp-readonly-collections/
  30. 30. 他のプログラムを起動する Processクラス // メモ帳を起動する Process.Start("Notepad"); // ファイルを指定してメモ帳を起動する Process.Start("Notepad", @"C:¥Hoge.txt"); // 規定のエディタで画像ファイルを開く(関連付け起動) Process.Start(@"C:¥Hoge.bmp"); http://jeanne.wankuma.com/tips/csharp/process/
  31. 31. SQLライクなループ構文を書く(1) LINQ // 偶数を検索する var array = new []{ 1, 2, 3, 4, 5 }; // ループ構文を使用する場合 var result = new List<int>(); foreach (var x in array) { if (x % 2 == 0) { result.Add(x); } }
  32. 32. SQLライクなループ構文を書く(2) LINQ // 偶数を検索する var array = new []{ 1, 2, 3, 4, 5 }; // LINQを使用する場合 var result = from x in array where x % 2 == 0 select x;
  33. 33. SQLライクなループ構文を書く(3) LINQ // 数を数える // ループ構文を使用する場合 foreach (var n in list) { if (n == 0) { num++; } }
  34. 34. SQLライクなループ構文を書く(4) LINQ // 数を数える // LINQを使用する場合 var num = (from n in list where n == 0).Count();
  35. 35. C#のツール紹介
  36. 36. ReSharper(Visual Studioのアドイン)
  37. 37. できること • コード監視 • ハイライト拡張 • クラスや変数の使用箇所の検索 • リファクタリング • タスク管理
  38. 38. コード監視 • 未定義の関数を作成 • 命名規則の確認 • コードの簡略化
  39. 39. 未定義の関数を作成
  40. 40. 命名規則の確認
  41. 41. varキーワードに置き換える
  42. 42. null許容型に置き換える
  43. 43. null合体演算子に置き換える
  44. 44. 初期化子に置き換える
  45. 45. 初期化子に置き換える
  46. 46. 暗黙型付け配列に置き換える
  47. 47. ハイライト拡張
  48. 48. ハイライト拡張 • 未使用のusingや変数、関数が灰色になる • エラーになるコードが赤色になる • コーディングルールに沿わないコードに破線が付く
  49. 49. 30日間無料
  50. 50. ありがとうございました

×