転職を繰り返したサラリーマンの多趣味ブログ

30才未経験でSEに転職した人の多趣味ブログ

【技術書メモ】確かな力が身につくC#「超」入門

Unityをメインにアプリ開発をしているが、Unityで使用する言語はC#だ。
自分は仕事でJavaを使っているからC#も何となく理解できるが、ここらで一度C#を学んでおきたいと思う。
そこで手に取ったのが、この「確かな力が身につく」シリーズだ。

確かな力が身につくC#「超」入門 (Informatics&IDEA)

確かな力が身につくC#「超」入門 (Informatics&IDEA)

イラスト、図が多めで、初心者にとって非常に分かりやすいと思う。
この本から学んだことを、ブログにまとめていく。

プロジェクトの作成

Visual Studioを立ち上げて、新規作成 / プロジェクト を選択する。
そこでプロジェクトの種類が色々出てくるが、ただC#の文法を確認するだけなら「コンソールアプリ」を選べば十分だ。
なお、プログラムの実行はデバッグ / デバッグなしで開始 を選ぶ。

変数の書き方

基本はJavaと同じなので割愛。
定数の書き方も一緒。

const int a = 3;

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()」のように、「クラス名.メソッド名」でも使用できる。

継承について

C#の継承の書き方は、Javaとちょっと違う。

class 派生クラス名 : 基本クラス名
{
}

<b>※またまた番外編。ポリモーフィズムについて</b>
派生クラスのインスタンスを、基本クラスの変数に入れることができる性質。変数の型がすっきりするやつね。

と、ざっとまとめました。ただ、あくまで初歩の初歩の内容なので、次は中級クラスの技術書を読もう。
けど、この確かな力が身につくC#「超」入門は、超良書です。