Unityをメインにアプリ開発をしているが、Unityで使用する言語はC#だ。
自分は仕事でJavaを使っているからC#も何となく理解できるが、ここらで一度C#を学んでおきたいと思う。
そこで手に取ったのが、この「確かな力が身につく」シリーズだ。
確かな力が身につくC#「超」入門 (Informatics&IDEA)
- 作者: 北村愛実
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2017/07/26
- メディア: 単行本
- この商品を含むブログを見る
この本から学んだことを、ブログにまとめていく。
プロジェクトの作成
Visual Studioを立ち上げて、新規作成 / プロジェクト を選択する。
そこでプロジェクトの種類が色々出てくるが、ただC#の文法を確認するだけなら「コンソールアプリ」を選べば十分だ。
なお、プログラムの実行はデバッグ / デバッグなしで開始 を選ぶ。
if文、for文、switch文、while文
これらも基本はJavaと一緒。
ただし、foreach文だけはメモしておこう。Javaの拡張for文とちょっと違うので。
float[] weights = { 41.2f, 42.5f, 44.9f, 43.0f, 29.2f }; foreach (float f in weights) { Console.WriteLine(f); }
コレクション
まずはList型から。
List型
List<float> weights = new List<float>();
Dictionary
次はDictionary型。Map型に近い印象。
Dictionary<string, float> weights = new Dictionary<string, float>(); weights.Add("2019/12/10", 41.2f); Console.WriteLine(weights["2019/12/10"]);
LINQとラムダ式
ラムダ式とは
戻り値を返す短いメソッドを、より簡潔に書く方法のこと。
(引数) => 戻り値の計算式
int Add(int n) { return n + 5; } // これをラムダ式で書くと n => n + 5
とかなり簡潔に書ける。
LINQとは
統合言語クエリ。配列やコレクションの中から条件を満たす値だけ取り出せる。まさにクエリです。
Whereメソッド
int[] hp = { 420, 120, 600, 0, 1200 }; // 600, 1200が取得できる var newHP = hp.Where(n => n >= 500);
※var型とは
代入された値によってコンパイラが自動的に型を判断。LINQのメソッドの戻り値は基本var型。
Selectメソッド
int[] hp = { 420, 120, 600, 0, 1200 }; // すべての要素の値を100減らす var newHp = hp.Select(n => n - 100);
Countメソッド
int[] hp = { 420, 120, 600, 0, 1200 }; // HPが0の要素を取り出し、その数をカウントする var newHp = hp.Where(n => n == 0).Count();
慣れたら、かなり使いやすそう。
プロパティ
通常、他クラスのメンバー変数にアクセスする場合、そのクラスのセッター、ゲッターメソッドを使用しなければならない。
だが、プロパティを使うと、直接メンバー変数にアクセスするような感覚でできる。
private int hp; // プロパティ public int Hp { set { this.hp = value; } get { return this.hp; } } Player player = new Player("たかし", 500); // Hpプロパティに代入 player.Hp -= 2000; // セッター player.Hp; // ゲッター
※ちょっと番外編。staticキーワードについて
いつも忘れてしまうので、ちょっとメモ。
staticをつけると、インスタンスではなくクラス自体に属するようになり、インスタンス間で共有される値になる。「クラス名.メンバ変数」で値を代入、取得できる。また、メソッドでも「Player.GetTeamName()」のように、「クラス名.メソッド名」でも使用できる。