.net column
.NET開発者のためのブログメディア

テキストエディタ

C#の引数とは?省略する方法も紹介!

2020年07月13日

SE
C#の引数を省略するには、どのような方法を用いるのがよいでしょうか?

PM
オプション引数や名前付き引数で省略できるようにしましょう。

C#で引数を省略する方法

この記事では、C#で引数を省略する方法を紹介します。オプション引数・名前付き引数の2機能について紹介しますが、最初に関数・引数の書き方についても示します。各自必要なところから読み始めていただければ幸いです。

C#の引数とは?

まず、混乱しないようにC#の引数について説明します。

関数とは?

引数を説明するために、まずC#の関数の説明をします。これは、いくつかの処理の塊をまとめることで、何度も出てくる処理を簡潔に書くことが出来る機能です。

例えば、このように使います。以下のコードをC#で記述し、実行します。
using System;

public class Program
{
static void Function() // 関数 “”Function””の定義
{
Console.WriteLine(“”Function Called.””);
}
static void Main()
{
Function(); // Main関数内でFunction関数を呼び出す
}
}

出力
Function Called.

関数Functionが呼ばれ、Console.WriteLine(""Function Called."");が呼ばれました。

引数とは?

次に、引数の説明です。引数の無い関数は、スコープの広いグローバル関数などが無い限り出力や返り値は毎回同じですが、引数を用いることで出力や返り値をカスタマイズ出来ます。

例えば、このように使います。以下のコードをC#で記述し、実行します。
using System;

public class Program
{
static void Function(string str) // 引数付き関数 “”Function””の定義
{
Console.WriteLine(“”Functino Recieved \””{0}\””.””, str); // ダブルクォーテーションの出力のためエスケープ
}
static void Main()
{
Function(“”Apple””); // Main関数内でFunction関数に””Apple””を与えて呼び出す
}
}

出力
Function Recieved ""Apple"".

関数Functionに""Apple""という文字列を送ったことで、Function関数の出力をカスタマイズすることが出来ました。

引数を省略する方法を紹介!

さて、先ほどC#の引数を紹介しました。しかし、「3つの引数のうち最初の2つだけ与えて、最後の1つは省略してデフォルトの値を使いたい」や「引数x, y, zのうちx, zだけ指定し、yは省略してデフォルトの値を使いたい」という場合があります。

こういった場合に、それぞれ「オプション引数」や「名前付き引数」という機能で引数の省略を行うことが出来ます。

オプション引数

オプション引数は、後ろからいくつかの引数を、デフォルトの値をとらせることで省略できる機能です。C++にもある機能です。

例えば、このように使います。以下のコードをC#で記述し、実行します。
using System;
using System.ComponentModel.DataAnnotations;

public class Program
{
static int Sum(int a, int b = 0, int c = 0) // 関数 “”Add”” の定義
{ // b, cはデフォルト値 0 を持つ
return a + b + c;
}
static void Main()
{
Console.WriteLine(Sum(3, 4, 5)); // 通常の関数呼び出し
Console.WriteLine(Sum(2, 5)); // 引数 c の省略
Console.WriteLine(Sum(3)); // 引数 b, c の省略
}
}

[出力] 12
7
3

関数Sumはint a, int b, int cの3つの引数を持ちますが、int b, int cにはデフォルトの値として0を持たせています。

こうすることで、Sum関数の呼び出し時に引数の数が3つの場合は、cに3つ目の引数が代入されます。2つの場合は、cにデフォルトの値が代入され関数が実行されます。

1つの場合には、bもcもデフォルトの値が入ります。このオプション引数は、最後の引数からしか省略できない、というデメリットを持ちますが、その分簡潔に記述できるというメリットがあります。

名前付き引数

名前付き引数は、先ほど示したオプション引数と違い、任意の位置の引数を省略し、また引数の順番を変えることもできる機能です。

例えば、このように使います。以下のコードをC#で記述し、実行します。
using System;
using System.ComponentModel.DataAnnotations;

public class Program
{
static int Sum(int a = 0, int b = 0, int c = 0) // 関数 “”Add”” の定義
{ // a, b, cはデフォルト値 0 を持つ
Console.WriteLine(“”a = {0}, b = {1}, c = {2}””, a, b, c);
return a + b + c;
}
static void Main()
{
Console.WriteLine(Sum(a : 3, c : 4, b : 5)); // bとcの順番を入れ替える
Console.WriteLine(Sum(a : 2, c : 5)); // 引数 b の省略
Console.WriteLine(Sum(c : 3)); // 引数 a, b の省略
}
}

[出力] a = 3, b = 5, c = 4
12
a = 2, b = 0, c = 5
7
a = 0, b = 0, c = 3
3

関数Sumの引数にa : 3 のように引数の名前 + : + 引数を記述することで、名前と一致する引数に値を渡すことが出来ます。この名前付き引数では、Sum(a : 3, c : 4, b : 5)のように引数の順番を入れ替えたり、Sum(a : 2, c : 5)Sum(c : 3)のように任意の引数を省略することができます。

省略機能ではなく、引数の順番を入れ替える機能は可読性の低下を引き起こしますので、むやみに利用しないように注意しましょう。

名前付き引数・通常の引数の混在

名前付き引数は、通常の引数と混在させることもできます。以下のコードをC#で記述し、実行します。
using System;
using System.ComponentModel.DataAnnotations;

public class Program
{
static int Sum(int a = 0, int b = 0, int c = 0) // 関数 “”Add”” の定義
{ // a, b, cはデフォルト値 0 を持つ
Console.WriteLine(“”a = {0}, b = {1}, c = {2}””, a, b, c);
return a + b + c;
}
static void Main()
{
Console.WriteLine(Sum(3, c: 4, b: 5)); // bとcの順番を入れ替える
Console.WriteLine(Sum(2, c: 5)); // 引数 b の省略
Console.WriteLine(Sum(a: 2, 3, c: 5)); // 変数名の明示

// コンパイルエラー 名前付き引数の後に通常引数を使う場合、順序変更できない
// Console.WriteLine(Sum(c : 3, 5, a : 23));
}
}

このように、最初の方の引数だけは、名前付き引数ではなく通常の引数にしたり、途中の引数だけ通常引数にしたり出来ます。この場合でも、引数の省略は行うことが出来ます。

名前付き引数の後に通常引数を用いる場合、名前付き引数の順序変更機能は用いることが出来ないため、注意しましょう。

SE
引数を活用できれば、コードを書く工程を減らせますね。

PM
引数の省略機能をうまく使えるようになると、日々の業務の効率化がはかれます。

引数の省略機能を活用しよう!

この記事では、C#の引数の省略機能を説明するため、関数や引数などの基本に触れ、最後の引数から省略できるオプション引数、引数の名前を明示することで自由な省略が行える名前付き引数の2つを紹介しました。

引数の省略をうまく使うことで、今まで無駄に書いていたコードを減らすことが出来ます。引数の省略機能を活用して、美しいコーディングを心がけましょう。


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)

Search

Popular

reccomended

Categories

Tags