#9 C#で学ぶ関数の基本
C#では、関数のことを「メソッド」と呼び、Javaと同じくクラスの中に書きます。この記事では、C#におけるメソッドの基本を、つまずきやすいポイントも含めて解説します。
メソッドを作ってみる
static void Greet(string name) {
Console.WriteLine($"こんにちは、{name}さん");
}
値を返すメソッド
static int Add(int a, int b) {
return a + b;
}
デフォルト引数
C#の引数には、既定値を設定できます。
static void Greet(string name = "ゲスト") {
Console.WriteLine($"こんにちは、{name}さん");
}
名前付き引数
C#には、呼び出し時に引数の名前を指定できる仕組みもあります。
Greet(name: "太郎");
引数が多い関数を呼び出す際、どの値が何を表しているかが分かりやすくなります。
可変長引数(params)
引数の個数が決まっていない場合は、paramsキーワードを使うと、いくつでも値を渡せるメソッドが作れます。
static int Sum(params int[] numbers) {
int total = 0;
foreach (var n in numbers) total += n;
return total;
}
Sum(1, 2, 3); // 6
Sum(1, 2, 3, 4, 5); // 15
メソッドのオーバーロード
C#では、同じ名前でも引数の型や個数が異なれば、複数のメソッドを定義できます。これを「オーバーロード」と呼びます。
static void Print(int value) {
Console.WriteLine($"整数: {value}");
}
static void Print(string value) {
Console.WriteLine($"文字列: {value}");
}
呼び出し時に渡した値の型に応じて、コンパイラが自動的にどちらのメソッドを使うかを判断してくれます。
参照渡し(ref・out)
通常、C#のメソッドに値を渡すと、その値の「コピー」が渡されるため、メソッド内で変更しても呼び出し元には影響しません。呼び出し元の変数そのものを書き換えたい場合は、refキーワードを使います。
static void Increment(ref int value) {
value++;
}
int count = 5;
Increment(ref count);
// countは6になる
メソッドから複数の値を返したい場合には、outキーワードも便利です(呼び出し前に初期化しなくてよい点がrefとの違いです)。
C#ならではの注意点
C#のメソッド名は、単語の先頭を大文字にする書き方(パスカルケース)が慣習です。JavaやJavaScriptの「先頭は小文字」というキャメルケースの慣習と混同しないよう注意しましょう。また、ref・outは呼び出し元の値を直接書き換えるため、多用するとコードの流れが追いにくくなることがあります。本当に必要な場面(複数の戻り値がどうしても欲しい等)に絞って使うのがおすすめです。
まとめ
C#のメソッドはクラスの中に書き、パスカルケースで名付けるのが基本です。デフォルト引数・名前付き引数・paramsによる可変長引数・オーバーロード・ref/outによる参照渡しを使い分けられると、より表現力のあるコードが書けます。
本ページはプロモーションを含みます。
参考書籍(PR)
C#をもっと学びたい方には「確かな力が身につくC#「超」入門 第2版」がおすすめです。
PR
コードを書かずに自動化したい方へ
「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。
コメント
コメントを投稿