型と数の話

[【完走目指す】初心者が25日で強くなる Advent Calendar 2022](https://qiita.com/advent-calendar/2022/aruhitoganbaru)
7日目です。
## ここまでを振り返る。
何となく振り返ります。
### アジャイル開発とウォーターフォールモデル
毎日記事を作る人は、アジャイル開発によく似ています。
![アジャイル.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961125/9bb8dc1d-8731-4af0-abb6-3bfdf304d4b9.png)
ささっと書いて次の記事を書き始める。素早さが命。
![ウォーターフォール.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961125/fa967694-8abd-d930-ea24-0bacfe6ecd92.png)
ウォーターフォールモデルは、カレンダー関係なく記事を書く人に似ています（そうでないときもあるかもしれないけど）。時間をかけてじっくりと作り、品質の高いものを作るところとか。



## みやすく変えたい
「変える」でなく「変えたい」です。努力はしますが、できないときもあるかも。
・見やすくする。→文字だけでなく、図や表を使う。
　　　　　　　　　文字を整える。長く書かない。
・多くの人が使うものに関連した記事を作る　→もう作ることは決まっているので無理。あきらめる。
・面白くする　→なかなか難しそう。いつか頑張る。


↓以下、本題です。
# 型
最初のほう、intに文字が入れられないとかいって苦労しました。
intとかfloatとか。いっぱいあります。

↓　調べてみました。
参照:

https://learn.microsoft.com/ja-jp/dotnet/csharp/language-reference/builtin-types/built-in-types

https://learn.microsoft.com/ja-jp/dotnet/csharp/fundamentals/types/

型が4つありました。
値型、参照型、リテラル型、ジェネリック型。
## 値型
値型はほかの方と比べていっぱいありました。
#### bool
これ、自分は使ったことあります。trueかfalseが入る。スイッチみたいな感です。
使ってみました
```
    public bool AAA;
```
publicなAAAを用意しました。
```
if (AAA == false)
        {
            Debug.Log("False");
        }
        else
        {
            Debug.Log("true");
        }
```
AAAは、unity側からtrue/falseを切り替えます
AAAの状態がログに出力されます。ちなみに、最初の状態を指定しないとデフォルトで falseになります。
## 結果
![スクリーンショット_20221206_090344.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961125/6bc1aa7c-ce83-11cf-e323-2a7cd01f151e.png)

切り替えます。
![スクリーンショット_20221206_090441.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961125/662921e6-0350-98fb-bfac-d27d2a4bb33a.png)

ちゃんと切り替えできました。


### 寄り道
今、if文の中の式で=が二つ入っています。１つだと、
![スクリーンショット_20221205_025237.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961125/7c55590d-8a68-dd64-d577-f9231222c829.png)

と出ます。　



>等価演算子とは、プログラミング言語で用いられる関係演算子（比較演算子）の一つで、二つの値を比較して等しければ「真」（true）を、等しくなければ「偽」（false）を返すもの。

引用:

https://e-words.jp/w/%E7%AD%89%E4%BE%A1%E6%BC%94%E7%AE%97%E5%AD%90.html#:~:text=%E7%AD%89%E4%BE%A1%E6%BC%94%E7%AE%97%E5%AD%90%E3%80%90%3D%3D%E3%80%91%3D%3D%3D,%EF%BC%88false%EF%BC%89%E3%82%92%E8%BF%94%E3%81%99%E3%82%82%E3%81%AE%E3%80%82

イコールの数で、あらわしているものの意味が変わるようです。
では、イコールの数はどこまで意味を持つのでしょうか。
1. ===(イコールが3つ)
中身だけでなく、型の形まで一緒の時に使われるようです。
例えばintのA=1、uintのB=1があったとします。この時、　
>A==B 


↑これは成立します。中身がどちらも1なので。
しかし、
>A===B 

だと成立しません。
さっきのif文を少し書き換えます。
```
public int A;
public uint B;
```
AとBを作ります。
```
 if (AAA === BBB)
        {
            Debug.Log("False");
        }
        else
        {
            Debug.Log("true");
        }
```

![スクリーンショット_20221206_150716.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961125/3dc7e5c7-c466-a530-21d4-ee3630449b61.png)

unityは、===は対応してないようです。

寄り道　おわり

#### byte
整数が入ります。
[整数数値型](https://learn.microsoft.com/ja-jp/dotnet/csharp/language-reference/builtin-types/integral-numeric-types)
とかいうやつです。
整数数値型には、以下の種類がありました。
sbyte	
byte	
short	
ushort	
int	
uint	
long	
ulong	
nint	
nuint	
これらには整数が入ります。


#### sbyte
さっき紹介したbyteに、sが付いています。
中身は結構違います。

---
### 違い
|説明|byte|sbyte|
|---|----|-----|
|特徴|符号付8bit|符号なし8bit|
|数字|0~255|-128~127|

符号付、符号なしはおそらくマイナスの数字があるかどうかでしょう。マイナスは、符号なので。

---

#### char
>char 型のキーワードは、Unicode UTF-16 文字を表す .NET System.Char 構造体型のエイリアスです。

引用：

https://learn.microsoft.com/ja-jp/dotnet/csharp/language-reference/builtin-types/char

普通のやつじゃないことはよくわかりました。
時間がかかりそうなので飛ばします。
#### decimal　double float
浮動小数点数値型
"浮動小数点数値型" は実数を表します。 浮動小数点数値型は、値の型です。 また、単純型でもあり、リテラルを使用して初期化することができます。 すべての浮動小数点数値型は、算術、比較、および等値演算子をサポートしています。

https://learn.microsoft.com/ja-jp/dotnet/csharp/language-reference/builtin-types/floating-point-numeric-types

すべて実数が入ります。
#### int

自分が最も使っているものになります。
さっき説明した[整数数値型](https://learn.microsoft.com/ja-jp/dotnet/csharp/language-reference/builtin-types/integral-numeric-types)です。
#### uint nint nuint long ulong syort usyort
↑intと同じ。

さあ、やっと値型が終わりました。
次は、参照型です。

 参照型の変数はデータ (オブジェクト) への参照を格納するのに対して、値型の変数はデータを直接格納します。 
引用:

https://learn.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/reference-types

とのことです。
C#で使える参照型には
class
interface
delegate
recordclass
interface
delegate
record
dynamic
object
string
があるようです。多い。

長くなるので説明は省きます。
代わりに、下にざっくりした説明を載せます

# 値型と参照型の違い
みかんの５があります
![みかんの５.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961125/a8fe19a5-7912-65f8-582f-85319b30b5fa.png)
みかんの５は、一つ一つ袋に入れられます。
![袋詰め.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961125/96cea60f-e3f5-d740-848c-c9f4717e709a.png)
↓これが、値が値型(intに入った状態です)
![袋入りミカン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961125/0cfa2b71-5c47-3864-d406-05ff1303fb83.png)
参照型の段ボールがあります。
![段ボール.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961125/963ddf01-aa42-8834-2003-de114f1c5ab5.png)
参照型の段ボールにはみかんの入った袋がいっぱい入ります。（値型のほかにも、入れられるものはいっぱいあります。）
![段ボール入り袋ミカン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961125/905a025f-7aa4-e48a-9d0e-075045a689b7.png)

では、何も入っていないからの袋（null）は段ボールに入るでしょうか。（不良品とか）
![空袋.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961125/6f60b8a0-da51-0e4c-b069-365001c1f961.png)

残念、入りません！
![スクリーンショット_20221206_205711.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961125/9dd9f43e-ec8d-c753-888a-3b06cda246c8.png)




## リテラル型、ジェネリック型
参照：

https://ufcpp.net/study/csharp/st_string.html

https://ufcpp.net/study/csharp/sp2_generics.html

この辺は時間がないので省略します。
おそらく、まだ使うことはないでしょう。中級者に上がったころにでも調べます。
## まとめ
引用多くね？
↑勉強するためだし、仕方ないのです。
型は多い。気をつけろ、間違えると入らないぞ。