C#の引数とは?省略する方法も紹介!
- システム
エンジニア - C#の引数を省略するには、どのような方法を用いるのがよいでしょうか?
- プロジェクト
マネージャー - オプション引数や名前付き引数で省略できるようにしましょう。
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));
}
}
このように、最初の方の引数だけは、名前付き引数ではなく通常の引数にしたり、途中の引数だけ通常引数にしたり出来ます。この場合でも、引数の省略は行うことが出来ます。
名前付き引数の後に通常引数を用いる場合、名前付き引数の順序変更機能は用いることが出来ないため、注意しましょう。
- システム
エンジニア - 引数を活用できれば、コードを書く工程を減らせますね。
- プロジェクト
マネージャー - 引数の省略機能をうまく使えるようになると、日々の業務の効率化がはかれます。
引数の省略機能を活用しよう!
この記事では、C#の引数の省略機能を説明するため、関数や引数などの基本に触れ、最後の引数から省略できるオプション引数、引数の名前を明示することで自由な省略が行える名前付き引数の2つを紹介しました。
引数の省略をうまく使うことで、今まで無駄に書いていたコードを減らすことが出来ます。引数の省略機能を活用して、美しいコーディングを心がけましょう。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社夢真ビーネックスグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。
C#新着案件New Job
-
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(新宿駅) -
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(新宿駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円神奈川県横浜市(桜木町駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円神奈川県横浜市(桜木町駅) -
基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(西新宿駅) -
基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(西新宿駅)