【C#】アンダーバー( _ ) ってどうやって使うのか!?

スポンサーリンク

C#を使っていてアンダーバー( _ )を使っているソフトを見たことがありますか?

アンダーバーは命名規則として、変数名の頭にアンダーバーを使ることがあります。
ただ今回は、アンダーバーを単体で使う話をしたいと思います。

アンダーバー単体で使ったときの意味

マイクロソフトのページでは下記説明をされています。

C# 7.0 以降では、C# で破棄がサポートされます。これらは、アプリケーション コードで意図的に使用しないプレースホルダー変数です。 破棄は、未割り当ての変数と同等です。つまり、値がありません。 破棄によって、あなたのコードを読み取るコンパイラおよびその他のユーザーに対して、次のような意図が伝わります。あなたは式の結果を無視するつもりでした。 あなたは、式の結果、タプル式の 1 つ以上のメンバー、メソッドの out パラメーター、またはパターン マッチング式のターゲットを無視したい可能性があります。

破棄 – 未代入の破棄可能な変数 | Microsoft Docs

ちょっと難しい説明ですが、タイトルの通り【未代入の破棄可能な変数】という事です。
意味が分かりませんよね。。。

簡単に言うと、「変数定義をせずに、以降にも使用予定がない変数」という事です。
言葉で説明よりも具体的にな例をとって使用してみたいと思います。

アンダーバーの使い方 その1

outを使った関数を作る

説明に入る前に前提を説明します。
整数の引数を2つもらい、足し算、引き算、掛け算の結果をoutを使って出力する関数を作ります。

private int ExeCalc(int a,int b,out int sum,out int sub,out int mlt)
{
    sum = a + b;    //足し算
    sub = a - b;    //引き算
    mlt = a * b;    //掛け算

    return 0;
}

※【out】とは、パラメータ修飾子で、呼び出し元(関数内)で変数を代入されます。

プロジェクトを作成する

そして、簡単にフォームを作ります。

足し算を出力するプロジェクトを作りました。
コントロールは下記のようにしました。

NumericUpDown(左):nudA
NumericUpDown(右):nudB
Button(計算):btnCalc
Label(足し算の結果:):label1  ※表示用です
Label(結果):lblResult  

使用例

btnCalcにクリックイベントを追加します。

アンダーバーを知らない人だとこんな書き方になります。

private void btnCalc_Click(object sender, EventArgs e)
{
    //計算実行
    int tmpA = (int)nudA.Value;
    int tmpB = (int)nudB.Value;
    ExeCalc(tmpA, tmpB, out int resultSum, out int resultSub, out int resultMuti);

    //結果表示
    lblResult.Text = resultSum.ToString();
}

使ってない変数が薄い灰色になってますね!
この灰色は、「変数定義しているけど、使ってないよ~」と注意喚起されています。
※無視しても問題はありませんw

ここで登場するのが、アンダーバー( _ )になります。

private void btnCalc_Click(object sender, EventArgs e)
{
    //計算実行
    int tmpA = (int)nudA.Value;
    int tmpB = (int)nudB.Value;
    ExeCalc(tmpA, tmpB, out int resultSum, out _, out _);

    //結果表示
    lblResult.Text = resultSum.ToString();
}

灰色だった変数定義をアンダーバー( _ )にすることでスッキリしました。
変数定義しているのに、以降で使われていないって無しかにソースを読み解く際に読みづらくなるかもしれませんね。

アンダーバーの使い方 その2

先ほどのフォームにCheckBoxを追加して、CheckBoxにチェックがついていたら引き算の結果を表示するようにしたいと思います。

プロジェクトを作成する

そして、簡単にフォームを作ります。

足し算を出力するプロジェクトを作りました。
コントロールは下記のようにしました。

NumericUpDown(左):nudA
NumericUpDown(右):nudB
Button(計算):btnCalc
Label(足し算の結果:):label1  ※表示用です
Label(結果):lblResult  
CheckBox(引き算):chkSub

使用例

そして、先ほどのクリックイベントを修正します。チェックボックスに応じてほしい情報を取得できるようにします。

private void btnCalc_Click(object sender, EventArgs e)
{
    //計算実行
    int tmpA = (int)nudA.Value;
    int tmpB = (int)nudB.Value;
    int result;
    _ = (chkSub.Checked == true) ? 
        ExeCalc(tmpA, tmpB, out result, out _, out _) : ExeCalc(tmpA, tmpB, out _, out result, out _);

    //結果表示
    lblResult.Text = result.ToString();
}

この使用例はちょっと無理やり感がありますが。。。
まぁ言いたいのは、使わない変数はアンダーバーで書くことができるという事です。

まとめ

今回はC#でのアンダーバーの使い方を紹介しました。
C#で使用するアンダーバー( _ )は、【 未代入の破棄可能な変数 】という事です。
あまり使う機会は少ないような気がしますが、無駄に変数を定義するくらいなら、アンダーバーを使用してスッキリとしたコードになるように心掛けた方がいいと思います。

コメント

タイトルとURLをコピーしました