C#のオプションパラメータとは?デフォルト値とOptional属性の使い方を解説
C#のオプションパラメータとは?
通常、メソッドのパラメータはすべて必須であり、呼び出し時には必ず引数を渡す必要があります。一方、省略可能なパラメータ(オプションパラメータ)を持つメソッドでは、呼び出し時に引数を渡すことが強制されません。つまり、一部の引数を省略したままメソッドを呼び出すことができます。
省略可能なパラメータには、メソッド定義の時点でデフォルト値が設定されています。呼び出し時に引数が渡されなければデフォルト値が使用され、引数が渡された場合はその値で上書きされます。
C#でパラメータを省略可能にする方法はいくつかあります。ここでは代表的な2つの方法を紹介します。
方法1:デフォルト値を指定する
最も一般的な方法は、パラメータ宣言時に「=」でデフォルト値を指定することです。
サンプルコード
using System;
namespace DemoApplication{
class Demo{
static void Main(string[] args){
OptionalMethodWithDefaultValue(5);
//value2は省略可能なので渡していない
OptionalMethodWithDefaultValue(5, 10);
//value2を渡している
Console.ReadLine();
}
public static void OptionalMethodWithDefaultValue(int value1, int value2 = 5){
Console.WriteLine($"Sum is {value1 + value2}");
}
}
}実行結果
上記コードの出力は次のとおりです。
Sum is 10 Sum is 15
この例では、OptionalMethodWithDefaultValue(int value1, int value2 = 5) の value2 にデフォルト値 5 が設定されています。呼び出し時に value2 の引数を渡さなければデフォルト値の 5 が使われ、引数を渡せばその値がデフォルト値を上書きします。
方法2:[Optional]属性を使う
もう一つの方法として、System.Runtime.InteropServices 名前空間の [Optional] 属性を使う方法があります。
サンプルコード
using System;
using System.Runtime.InteropServices;
namespace DemoApplication{
class Demo{
static void Main(string[] args){
OptionalMethodWithDefaultValue(5);
OptionalMethodWithDefaultValue(5, 10);
Console.ReadLine();
}
public static void OptionalMethodWithDefaultValue(int value1, [Optional]int value2){
Console.WriteLine($"Sum is {value1 + value2}");
}
}
}実行結果
上記コードの出力は次のとおりです。
Sum is 5 Sum is 15
この例では、[Optional] 属性によって value2 が省略可能であることを指定しています。なお、[Optional] 属性を使う場合にデフォルト値を明示しないと、その型の既定値(int の場合は 0)が使用される点に注意してください。
注意点:省略可能なパラメータは必須パラメータより後に置く
省略可能なパラメータは、必ずパラメータリストの末尾に配置する必要があります。たとえば、OptionalMethodWithDefaultValue(int value1 = 5, int value2) のように、必須パラメータより前に省略可能なパラメータを記述するとコンパイルエラーになります。
エラーになる例
using System;
namespace DemoApplication{
class Demo{
static void Main(string[] args){
OptionalMethodWithDefaultValue(5);
OptionalMethodWithDefaultValue(5, 10);
Console.ReadLine();
}
public static void OptionalMethodWithDefaultValue(int value1 = 5, int value2){
Console.WriteLine($"Sum is {value1 + value2}");
}
}
}エラー:省略可能なパラメータは、すべての必須パラメータより後になければなりません。
-
Java 9で追加されたOptional.stream()メソッドとは?使い方を実例付きで解説
Java 9では、Optionalクラスにstream()メソッドが新たに追加され、機能が大幅に強化されました。このメソッドを使うことで、「Optional要素のStream」を「実際に値が存在する要素だけのStream」へ簡単に変換できます。具体的な動作は以下の通りです。Optionalが値を保持している場合 → その値を1つだけ含むStreamを返すOptionalが空(empty)の場合 → 空のStreamを返すこれにより、これまでJava 8で必要だった冗長な条件分岐や三項演算子を使わずに、簡潔で読みやすいコードを書けるようになりました。構文public Stream<T>
-
Javaのfinalキーワードとは?定数宣言から継承・オーバーライドの制限まで解説
Javaにおける「final」は、変数・メソッド・クラスに対して「それ以上変更できない」ことを示す修飾子(キーワード)です。主に定数の宣言に使われ、一度値を代入するとプログラム中で再代入することはできません。finalを使った定数の宣言finalキーワードの最も代表的な使い方は、定数の宣言です。例えば、円周率のように値が変わらないものを扱う場合に利用します。final double PIE = 3.14;このように宣言すると、PIEは以降プログラム内で別の値に書き換えられなくなります。もし再代入しようとすると、コンパイルエラーが発生するため、誤って重要な値を変更してしまう事故を防げます。クラス