演算 - 単純な加算と暗黙的なデータ型変換

完了

数値データに算術演算を実行することがたびたびあります。 このユニットで加算から始め、次のユニットで他の演算まで展開します。C# のコンパイラがコードを解析し、解釈するしくみから理解すべき重要なレッスンがあるからです。

ステップ 1: 2 つの数値を加算する

2 つの数値を加算するには、加算演算子を使用します。これはプラス記号 + です。 そうです。文字列連結に使用するものと同じプラス記号 + が加算にも使用されます。 1 つの記号を複数の目的で再び用いることは "演算子のオーバーロード" と呼ばれることがあり、C# では頻繁に行われます。

この場合、ユーザーの意図は C# コンパイラに理解されます。 コンパイラでは、コードが解析され、2 つの数値 (オペランド) によって + (演算子) が囲まれていることが認識されます。 変数のデータ型 (両方とも int) を指定すると、これら 2 つの値を追加することを意図したものとなります。

.NET エディターで前の演習から任意のコードを削除し、次のコードを追加します。

int firstNumber = 12;
int secondNumber = 7;
Console.WriteLine(firstNumber + secondNumber);

次にコードを実行します。 出力コンソールに次の結果が表示されます。

19

ステップ 2: データ型を組み合わせ、暗黙的な型変換を強制する

+ 記号と共に string 値と int 値の両方を使用するとどうなるでしょうか。

次のコードと一致するように実行したコードを変更します。

string firstName = "Bob";
int widgetsSold = 7;
Console.WriteLine(firstName + " sold " + widgetsSold + " widgets.");

次にコードを実行します。 出力コンソールに次の結果が表示されます。

Bob sold 7 widgets.

この例では、C# コンパイラで、+ 記号を使用して 2 つのオペランドを連結することが望まれていると理解されます。 そう推論されるのは、+ 記号が string データ型と int データ型のオペランドに囲まれているためです。 そこで、残りの文字列と連結できるよう、int 変数 widgetsSoldstring に一時的に暗黙的変換することが試行されます。 C# コンパイラでは、できる限りユーザーを支援すべく試行されますが、自分の意図について明示的になることが理想的です。

Note

データ型の変換はここに記載されている内容だけではありません。 C# モジュールのキャストと変換の手法を使用したデータ型の変換は、あるデータ型から別のデータ型に値を変換する方法を理解するのに役立ちます。

ステップ 3: 数値の加算と文字列の連結のさらに高度な例を試す

.NET エディターで次のコードに合わせてコードを修正します。

string firstName = "Bob";
int widgetsSold = 7;
Console.WriteLine(firstName + " sold " + widgetsSold + 7 + " widgets.");

このコードを実行すると、次の出力が得られます。

Bob sold 77 widgets.

int 変数 widgetsSold をリテラル int7 に追加する代わりに、コンパイラでは、すべて文字列として処理され、まとめて連結されます。

ステップ 4: かっこを追加し、意図をコンパイラに明示する

.NET エディターで次のコードに合わせてコードを修正します。

string firstName = "Bob";
int widgetsSold = 7;
Console.WriteLine(firstName + " sold " + (widgetsSold + 7) + " widgets.");

このコードを実行すると、次の出力が得られます。

Bob sold 14 widgets.

かっこ記号 () がもう 1 つのオーバーロードされた演算子になります。 この場合、数式と同じように、左かっこと右かっこで "演算の順序" が形成されます。 最も内側にあるかっこを最初に解決し、結果的に、intwidgetsSold と値 7 を加算することが今回の意図であると指示します。 それが解決されると、コードでは、残りのメッセージと連結できるよう、結果を暗黙的に文字列に変換します。

Note

計算と連結の両方を 1 つのコード行で実行することは避けるべきでしょう。 ここの要点は、演算子とオペランドをコンパイラの視点で見る方法を理解するのに役立ちます。

まとめ

この演習から得られる主な知識は次のとおりです。

  • 数値に数学的加算を実行できます。
  • 文字列連結と加算の両方でプラス (+) 記号が使用されます。 これは "演算子のオーバーロード" と呼ばれており、演算中のデータ型に基づいて適切な使用方法がコンパイラによって推論されます。
  • 可能であれば、C# コンパイラでは、数字の文字列表現を表示目的で連結することが開発者の意図であることが明らかな場合、暗黙的に intstring に変換されます。
  • かっこを使用して演算の順序を定義し、特定の演算を他の演算の前に実行する意図があることをコンパイラに明示的に伝えます。