こんにちは。たいら(@tairaengineer2)です。
この記事では、C#で名前付き引数について解説します。
スポンサーリンク
前提条件
この記事では、Visual Studio 2017 Communityを使っています。
インストールの仕方は、下の記事をご参考ください。
名前付き引数とは
名前付き引数
名前付き引数を使用すると、呼び出されたメソッドのパラメーター リストに記述されているパラメーターの順序を記憶したり、検索したりする必要がなくなります。
各引数のパラメーターはパラメーター名で指定できます。
名前付き引数と省略可能な引数 (C# プログラミング ガイド) | Microsoft Docsから引用させて頂きました
使い方は、たとえば
public int GetSum(int a, int b)
というメソッドがあった場合、
GetSum(a: 3, b: 4)
という風に、指定したいメソッドの引数で指定している名前のあとに:(コロン)と指定したいものを書けばOKです!
メソッドに引数を渡す場合、メソッドで指定している順番どおりに渡す必要があります。
順番を間違うと、エラーが起こったり、バグの原因となります。
でも、名前付き引数を使うと、そういう心配がないんです!
いやあ、便利ですね♪
では、早速使ってみましょう!
解説で使うC#の概要
3つのint型の引数を渡すと、計算して結果が返ってきて、その結果をコンソールに表示するプログラムです。
コンソールプロジェクトを作成するやり方は下の記事をご参考ください。
プログラムを作成したあと、ビルドをするやり方はこちらの記事をご参考ください。
C#プログラム
メインプログラムを1つ、計算するプログラムを1つ、合計2つのプログラムを作りました。
計算プログラム
namespace ConsoleApp1
{
static class SumCalculation
{
/// <summary>
/// 3つの引数を計算して返すメソッド
/// </summary>
/// <param name="a">1つめ</param>
/// <param name="b">2つめ</param>
/// <param name="c">3つめ</param>
/// <returns>引数の合計</returns>
public static int GetSum(int a, int b, int c)
{
return a * b + c;
}
}
}
メインプログラム
using System;
/// <summary>
/// 名前付き引数を練習するクラス
/// </summary>
namespace ConsoleApp1
{
class Program
{
/// <summary>
/// メイン
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
Console.WriteLine("----名前付き引数を使わない結果----");
int result = SumCalculation.GetSum(3, 4, 5);
Console.WriteLine("引数3, 4, 5:" + result);
int result1 = SumCalculation.GetSum(4, 5, 3);
Console.WriteLine("引数4, 5, 3:" + result1);
Console.WriteLine("----名前付き引数を使った結果----");
int allNameResult = SumCalculation.GetSum(c: 5, a: 3, b: 4);
Console.WriteLine("引数c: 5, a: 3, b: 4:" + allNameResult);
int nameResult = SumCalculation.GetSum(3, c: 5, b: 4);
Console.WriteLine("引数3, c: 5, b: 4:" + nameResult);
}
}
}
実行結果
----名前付き引数を使わない結果----
引数3, 4, 5:17
引数4, 5, 3:23
----名前付き引数を使った結果----
引数c: 5, a: 3, b: 4:17
引数3, c: 5, b: 4:17
続行するには何かキーを押してください . . .
では、解説していきます!
スポンサーリンク
実行結果の解説
名前付き引数を使わない場合の結果を見てみましょう。
式 | 結果 |
---|---|
int result = SumCalculation.GetSum(3, 4, 5); | 17 |
int result1 = SumCalculation.GetSum(4, 5, 3); | 23 |
名前付き引数を使わない場合、順番が異なると結果が違っています。
それは
式 | aに入る数字 | bに入る数字 | cに入る数字 |
---|---|---|---|
SumCalculation.GetSum(3, 4, 5) | 3 | 4 | 5 |
SumCalculation.GetSum(4, 5, 3) | 4 | 5 | 3 |
この通り、メソッドが指定した通りの順番で引数に数字が入るからです。
人がすることなので、順番を間違うことはあります。
これが、バグの原因になります。
では、名前付き引数を使った結果を見てみます。
式 | 結果 |
---|---|
SumCalculation.GetSum(c: 5, a: 3, b: 4); | 17 |
SumCalculation.GetSum(3, c: 5, b: 4); | 17 |
という風に名前付き引数で指定しているから、メソッドで指定している引数の順番どおりにならなくてもOKなんです!
また、引数の指定に一般的な指定の仕方と、名前付き引数を混ぜてもOKです。
SumCalculation.GetSum(3, c: 5, b: 4);
これは1つ目の3は、名前付き引数で指定していないのでaに入ります。
もし
int faultResult = SumCalculation.GetSum(5, a: 3, b: 4);
というように指定した場合
CS1744 名前付き引数 'a' は、位置引数が既に指定されているパラメーターを指定します
というようにエラーメッセージが出ます。
つまり、一般的な指定の仕方の方が、名前付き引数より優先されます。
スポンサーリンク
まとめ:名前付き引数を使ってみよう!
以上が名前付き引数の解説です。
あなたのご参考になったのなら、とても嬉しいです(*´▽`*)
ではでは~(・ω・)ノシ
ほかにもC#勉強記事を書いてます。
よければご参考ください。