ここでは少し特殊な引数の指定方法について学びます。
引数なのでメソッド(関数)で利用する知識ですが、知らなくても困らない気もします。
ここではC#の関数について学びます。関数 (function)関数とは、同一の処理を1機能としてまとめ、いつでも呼び出しできるようにする機能です。例えばコードに同じような記述が10回ある場合、同じコードを10回書くのは非効率です。こういった場合に該当するコードを関数化して、いつでも呼び出せるようにします。ちなみに、厳密にはC#に関数は存在せず、それよりも強化された仕組みとしてメソッドが存在します。メソッドは必ずクラスに属する必要があるのですが、今はそこまでの知識は...
ここではC#のクラスについて学びます。クラスはC#において最も大切な機能だと思ってます。それもあって最低限の内容を書いたつもりが、何かめっちゃ長くなりました。疲れたら数回に分けて読んでください。クラス(class)クラスとは特定の機能を1つにまとめたものです。正直、説明が難しいのでコードを使って話します。最初に以下の記述方法とサンプルコードを見てください。これは車という機能をクラス化したコードです。// クラス public class Car { ...
名前付き引数(Named arguments)
これはメソッドに引数を与える時に各引数を名前を利用して指定します。
正直、サンプルコード見てもらったほうが早いと思います。
namespace Sample
{
internal class Display
{
public void Output(string name, int age, string address)
{
Console.WriteLine($"名前={name}, 年齢={age}, 住所={address}");
}
}
internal class Program
{
static void Main(string[] args)
{
var d = new Display();
// '名前付き引数' を利用する
d.Output(name: "りさ", address: "2次元", age: 15);
}
}
}
こんな感じに引数名と:(コロン)を利用して引数を指定します。
そうすると普通に引数を与える場合と異なり、好きな順番で記述することができます。
// '名前付き引数' を利用する
d.Output(name: "りさ", address: "2次元", age: 15);
その代わりメソッドの引数名を変えるとビルドエラーになります。
この部分が個人的に嫌いなので僕は使いません。いわゆる賛否ある系です。
引数を指定する時に分かりやすいと言う噂がある(適当)。
省略可能な引数(Optional arguments)
これは引数にdefault値を指定しておき、未指定の場合に自動的に値が適用される仕組みです。
以下がサンプルコードです。先程の名前付き引数と異なり、頻繁に使ってる気がします。
namespace Sample
{
internal class Display
{
public void Output(string name, int age = 15, string address = "2次元")
{
Console.WriteLine($"名前={name}, 年齢={age}, 住所={address}");
}
}
internal class Program
{
static void Main(string[] args)
{
var d = new Display();
// '省略可能な引数' を利用する
d.Output("りさ"); // ageとaddressは未指定だからdefault値が利用される
}
}
}
こんな感じにdefault値が指定してある引数が未指定だと、自動的にdefault値が採用されます。
その結果、必要な引数の個数を満たしてなくても、ビルドエラーにならず実行できます。
// '省略可能な引数' を利用する
d.Output("りさ"); // ageとaddressは未指定だからdefault値が利用される
なお、この仕組みには、いくつか注意点があります。
- default値を付けた引数より後ろに普通の引数は記述できない。
- default値に指定できるのはコンパイル時の定数値のみ。
1つ目はそのままの意味です。default値が付いた引数は省略して記述する都合から必ず最後に書きます。
仮にdefault値を付けた引数を複数使いたい場合、これら全てを最後に記述する必要があります。
要は最初とか真ん中の引数をdefault値が付いた引数にすることはできません。
// こういうのはビルドエラー
public void Output(string name, int age = 15, string address)
{
}
2つ目はdefault値に指定できる値の制限です。
default値は値型でも参照型でも何でも指定できますが、そこに記述する値はコンパイル時の定数である必要があります。
これはクラスみたいな値をdefault値に指定する場合、以下のような記述はできません。
と言うより、string以外の参照型はnullしか指定できないので、ほぼほぼ値型で利用します。
internal class Display
{
// コンパイル時の定数以外はビルドエラー
public void Output(Person person = new Person() { Name = "りさ", Age = 15 })
{
}
}
internal class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
あとがき
僕は遥か古来から省略可能な引数をdefault引数って呼んでるのですが、正式名称では無いと思います。
と言うか、何を参考にしてその名前を覚えてきたのか分からない。
◆ C#に関する学習コンテンツ
この記事は参考になりましたか?
コメント