独習C#勉強メモ1

独習C#を読んで自分が知らなかったことまとめ

unityを使っていて勉強不足で他の方が書いたコードがわからなかったりすることが結構あります。その時用に自分では使わないけどコードを読むためにぱっと全体を勉強しようと思いました。


なんて書いてあるかわからなかった、知らなかったこと


最初この本の0が0(ゼロ)なのかφ(ファイ)なのかわからなくて戸惑った
(´・ω・`)
普通にゼロでした。

デバッグメモ

ブレークポイントの設定(エディタ画面の一番左をクリックする)->上のメニュー実行->デバッグの開始

一般的な例外エラーの種類!よく出るやつ

  • System.ArgumentException
    メソッドの引数に関する例外。引数がnullだったりそこらへんが原因
  • System.IndexOutOfRangeException
    インデックスが範囲外。配列データ扱ってたり、for文の中とかでよく起きる。
  • System.InvalidCastException
    無効なキャスト。変なアップキャストなりダウンキャストしてる。
  • System.ArithmeticException
    算術演算での例外。0で割ったり変なことしてる。
  • System.IO.IOException
    ファイル処理に関わる例外。ファイルがないとかpathが違うとか
  • System.NullReferenceException
    nullを参照しようとしてる。

nullチェック

string str = null;
string unspace = str?.Trim();
//strがnullでもエラーにならない
string str = null;
string unspace = null;

if(str != null){
    unspace = str.Trim();
}
//?. を使わないとどんどんコードが長くなっていく。?は"nullかどうかには関わらず"と訳せるのかな?

結構ゲームを開発していてnullチェックしないとエラーが出るので機会は多い。ex)セーブデータがあれば上書きする。ただしunsafeな気もする。


null許容型(int?みたいな"?“をつけた表現)

int? num = null;
//これでもエラーが出ない。使い所がよくわからない。

null合体演算子(??)

string str ="へっぽこ";
string def = "太郎";
Debug.Lpg(str??def);
//結果はへっぽこ。もしstrがnullだった場合defaultで太郎が表示されるみたい
//これも楽をするための書き方かな
//書き換えで
string str ="へっぽこ";
string def = "太郎";

if(str != null){
    Debug.Lpg(str);
}else if(str == null){
    Debug.Lpg(def);
}
//みたいな感じ

標準ライブラリ

正規表現


例がたくさんあるがワイルドカードみたいなのでいろんな表現ができる

var tel = new[]{"090-0000-0000","070-999-9999","020-1111"}
var rgx =new Regex (@"¥d{2,4}-¥d{2,4}-¥d{4}");
//Regexクラスはmatch()とか等しいかどうか調べるためのメソッドが用意されてるクラス
//@は逐語的文字列リテラルという。早い話が@以下は必ず普通の文字列としてみるよということ。@がないと¥を別の意味で捉えたりする
//¥dは0~9までの数字がなにかはいるよという意味。[0-9]ともかける
//¥d{2,4}は0〜9の数字が2〜4個という条件を表す

foreach(var i in tel){
    Debug.Log(rgx.IsMatch(i) ? i : "Unmatch")
}
//結果は"020-1111"だけ書式に合わないためunmatchとコンソールに出る

ごちゃごちゃたくさん書いてあったので必要なときに調べる。

ジェネリクス(generics)とは


汎用的なクラスやメソッドを特定の型に対応付けるための仕組み。 EX) Listこの<>でかこって型を決める仕組みのこと。

インデクサー(indexer)とは


オブジェクトにブラケット記法([]を使ってアクセスする方法)を使って、配列のように利用するためのプログラム部分のこと

ドット記法
var obj = new Object();

obj.name = "へっぽこ";

//nameというプロパティから値を取得してコンソールに表示する。
console.log(obj.name);

こんな感じにドットを使ってプロパティにアクセスする方法

ブラケット記法 []を使ってプロパティにアクセスする方法。

EX)

class Indexer
{
    private string [] testList = { "へっぽこ", "太郎", "スター" };
    //これがインデクサー
    //↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
    public string this[int index]
    {
        set
        {
            testList[index] = value;
        }
        get
        {
            return testList[index];
        }
    }
    //↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
}
   
class UseIndexer
{
    static void Main()
    {
        Indexer indexer = new Indexer();
            
        Console.WriteLine( indexer[2] );
    }
}

See also