はじめてのC#【 02_演算子 】


##    はじめに

  __<font color="blue">　【C#(シーシャープ)】</font>__ はMicrosoft社が開発した
　　　プログラミング言語で、C++やJavaに似た構文を持ち
　　　.NET Framework上で稼働するWindowsアプリの開発や
　　　Webアプリケーション開発のためのフレームワークである
　　　ASP.NETが使用可能なプログラム言語です。

##### このメモは、C#の基本的な記載方法のまとめです。

--------------------------------------------------------------

## 前回

https://qiita.com/nano357/items/87278d3e36636df8a6d8


------------------------------------------------

## <font color="green">算術演算子</font>

````
      +      ･･･ 加算  AにBを加え
          例: int result = A + B;


      -      ･･･ 減算  AからBを引く
          例: int result = A - B;


      *      ･･･ 乗算  AにBを掛ける
          例: int result = A * B;


      /      ･･･ 除算  AをBで割る
          例: int result = A / B;


      %      ･･･ 剰余  AをBで割った余り
          例: int result = A % B;

````
------------------------------------------------

## <font color="green">代入演算子</font>

````
      =       ･･･ 代入  Bの値をAに割り当てる
          例: A = B;


      +=      ･･･ 加算して代入  A + B の結果を A に割り当てる
          例: A += B;   ( A = A + B と同じ)


      -=      ･･･ 減算して代入  A - B の結果を A に割り当てる
          例: A -= B;   ( A = A - B と同じ)


      *=      ･･･ 乗算して代入  A * B の結果を A に割り当てる
          例: A *= B;   ( A = A * B と同じ)


      /=      ･･･ 除算して代入   A / B の結果を A に割り当てる
          例: A /= B;   ( A = A / B と同じ)


      %=      ･･･ 剰余して代入  A % B の結果を A に割り当てる
          例: A %= B;   ( A = A % B と同じ)

````
------------------------------------------------

## <font color="green">比較演算子</font>

````
      <       ･･･ 未満  AはBより小さい
          例: bool result = A < B;


      <=      ･･･ 以下  AはBより小さいか等しい
          例: bool result = A <= B;


      >       ･･･ 超過  AはBより大きい
          例: bool result = A > B;


      >=      ･･･ 以上  AはBより大きいか等しい
          例: bool result = A >= B;


      ==      ･･･ 同値  AとBが等しい
          例: bool result = A == B;


      !=      ･･･ 同値ではない  AはBは等しくない
          例: bool result = A != B;


　※`==` 演算子は、主にプリミティブ型の比較  
      　 例えば、`int` や `float` 型の値が等しいかを比較する場合

````

------------------------------------------------

## <font color="green">論理演算子</font>

````
      &&     ･･･ AND(論理積)  AとBの両方が true の場合 true
          例: bool result = A && B;


      ||     ･･･ OR(論理和)  AまたはBのいずれかが true の場合 true
          例: bool result = A || B;


      !      ･･･ NOT(論理否定)  Aが true なら false 、false なら true
          例: bool result = !A;

````
------------------------------------------------

## <font color="green">インクリメント演算子</font>

````
      ++x    ･･･ 前置  手順① x = x + 1;  手順② y = x;
          例: int y = ++x;


      x++    ･･･ 後置  手順① y = x;  手順② x = x + 1;
          例: int y = x++;


````
------------------------------------------------

## <font color="green">デクリメント演算子</font>

````
      --x    ･･･ 前置  手順① x = x - 1;  手順② y = x;
          例: int y = --x;


      x--    ･･･ 後置  手順① y = x;  手順② x = x - 1;
          例: int y = x--;


````
------------------------------------------------

#### トピック･･･ <font color="blue">オブジェクトの比較</font>
>オブジェクトとは、クラスから生成されるインスタンスのこと。

https://qiita.com/nano357/items/b790b4c0cfbabccb1764

基本的にはオブジェクト同士の比較には　Equals() 　と呼ばれる、オブジェクトの内容を比較するメソッドを使用する。
>メソッドとは、クラス内に定義される関数のことで、オブジェクトが持つ動作や処理を実行するための一連の命令です。

例えば、Equals() メソッドは、各オブジェクトがどのように同じかどうかを判断するロジックが含まれています。


特に、文字列の比較では == を使用せず、Equals() を使う。

理由:  
== 演算子は デフォルトではメモリ上の場所（アドレス）を比較する。
そのため、内容が同じであっても異なるインスタンスであれば false になることがある。  

>つまり、まったく同じデータを持っていたとしても、別々に作られたもの（別の箱に入っているもの）は違うものと判定されてしまう ということです。

・身近な例えでの説明

机の上にある 赤いボールA と棚の上にある 赤いボールB があるとします。

>異なるインスタンス＝見た目や大きさがまったく同じでも、
それぞれ別の場所にある別のボールです。 



```csharp
class Ball
{
    public string Color;
}

Ball ballA = new Ball { Color = "Red" };
Ball ballB = new Ball { Color = "Red" };

Console.WriteLine(ballA == ballB); // False
//（別々に作られたから違うと判定される）

````
== 演算子 は、見た目の色や大きさではなく、
どこにあるか（つまり参照が同じかどうか）を比べています。

したがって、たとえ色が同じでも 異なる場所に置かれている ので、== は false を返します。

>💡 理由: == は、
「どこに置かれているか（参照）」を見て比較しているため、
異なるインスタンス（異なる場所にあるボール）だと false になる。



一方、Equals() はオブジェクトの内容内容（この場合はボールの色）を比較するように実装されており、適切な比較ができる。  

例:  

```csharp  
class Ball
{
    public string Color;
}

Ball ballA = new Ball { Color = "Red" };   // 赤いボールA（色が「Red」）
Ball ballB = new Ball { Color = "Red" };   // 新しく作った別の赤いボールB（色が「Red」）

bool result2 = ballA.Equals(ballB); // 内容が同じなら true

```  
------------------------------------------------
  
#### トピック･･･ <font color="blue">比較演算子と条件分岐の関係</font>
>比較演算子は、制御文のif 文や三項演算子でよく使用されます。

https://qiita.com/nano357/items/550e552d0c53c0782a05
## <font color="green">if 文を使う例</font>

```C#
int A = 5;
int B = 10;

if (A < B) // A が B より小さい場合
{
    Console.WriteLine("A は B より小さい");
}
else
{
    Console.WriteLine("A は B より大きいか等しい");
}


````
#### コーディングのコツ
大小比較演算子 “<”、 “<=” を好んで使い、”>”、 “>=” はなるべく避る。

理由：大小の方向を統一し、右側を大きい方にすることで、混乱を避ける。 


-----------------
## <font color="green">三項演算子を使う例</font>


条件式 ? 式1 : 式2

条件式が  true の場合は   式1 を評価した値を返します
　fales の場合は  式2 を評価した値を返します

```C#
int A = 5;
//変数 A に5を代入しています。

int B = 10;
//変数 B に10を代入しています。

string result = (A < B)
    ? A + " は " + B + " より小さい"
    : A + " は " + B + " より大きいか等しい";
    
// (A < B) という条件式が true であるため、
// 式1 の A + " は " + B + " より小さい" が評価され、
// result に代入されます。

Console.WriteLine(result);
// 結果を出力します

// 出力: 5 は 10 より小さい

````
--------------------------------------------------------------

## 次回

https://qiita.com/nano357/items/136b287f09b857125f3d

--------------------------------------------------------------
## 参考文献

C#関連情報サイト様

https://xexeq.jp/blogs/media/it-glossary412#list7

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

--------------------------------------------------------------